SSM框架学习——SpringMVC之请求与响应

her~~llo,我是你们的好朋友Lyle,是名梦想成为计算机大佬的男人!

博客是为了记录自我的学习历程,加强记忆方便复习,如有不足之处还望多多包涵!非常欢迎大家的批评指正。

今天主要学习关于请求与响应的知识。

目录

一、请求

 1.1请求映射路径

 1.2请求方式

Get请求

Post请求(参照Get请求)

普通参数请求参数名和形参名不同,使用@RequestParam

Post请求中文乱码处理

 1.3请求参数(传递json数据)

json数组

json对象(POJO)

json数组(POJO)

 1.4@RequestBody与@RequestParam区别

 1.5日期类型参数传递

二、响应

 2.1响应页面

 2.2响应数据(都需要加@ResponseBody)


一、请求

 1.1请求映射路径

团队多人开发,每人设置不同的请求路径,万一冲突,如何解决?

设置模块名作为请求路径前缀。

名称:@RequestMapping

类型:方法注解、类注解
位置: SpringMVC控制器方法定义上方
作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀

范例:

@Controller
@RequestMapping("/user")//定义整个模块的请求路径前缀
public class UserController {

    @RequestMapping("/save")//设置当前操作的访问路径
    @ResponseBody //设置当前操作的返回值类型
    public String save(){
        System.out.println("user save..");
        return "{'module':'user save'}";
    }
}

属性:
value(默认)︰请求访问路径,或访问路径前缀

 1.2请求方式

Get请求

  • 普通参数: url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数,localhost:8080/user/save?name=Lyle&age=20
        @RequestMapping("/save")
        @ResponseBody 
        public String save(String name, int age) {
            System.out.println("user save.." + name + age);
            return "{'module':'user save'}" + name + age;
        }

  • pojo参数:请求参数名与形参对象属性名相同,定义PO3o类型形参即可接收参数,例如User中有name和age属性,要这样请求localhost:8080/user/pojoParam?name=Lyle&age=20
    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojo(User user) {
        System.out.println("pojo参数.." + user);
        return "{'module':'pojo参数'}" + user;
    }
    
  • pojo嵌套参数:POJO对象中包含POJO对象,请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数,例如User中有name和age属性,还有address对象属性,address里又有province和city属性,要这样请求localhost:8080/user/pojoContainPojoParam?name=Lyle&age=20&address.city=邢台&address.province=河北
    @RequestMapping("/pojoContainPojoParam")
    @ResponseBody
    public String pojoContainPojo(User user) {
        System.out.println("pojo嵌套pojo.." + user);
        return "{'module':'pojo嵌套'}" + user;
    }
  • 数组请求:数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数,例:形参中有likes字符串数组,传多个likes参数,不一样就接受不到,要这样请求localhost:8080/user/arrayParam?likes=music&likes=game
    @RequestMapping("/arrayParam")
    @ResponseBody
    public String array(String[] likes) {
        System.out.println("数组参数.." + Arrays.toString(likes));
        return "{'module':'数组参数'}" + Arrays.toString(likes);
    }
  • 集合请求:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系,还是用likes做示范,但是这个要特殊一些,在形参前加@RequestParam,不加的话,它会以为List是一个POJO对象进行处理。
    @RequestMapping("/listParam")
    @ResponseBody
    public String array(@RequestParam List<String> likes) {
        System.out.println("集合参数.." + likes);
        return "{'module':'集合参数'}" + likes;
    }

Post请求(参照Get请求)

  • 普通参数:
  • pojo参数
  • pojo嵌套参数
  • 数组参数
  • 集合参数

普通参数请求参数名和形参名不同,使用@RequestParam

@Controller
@RequestMapping("/brand")
public class BrandController {
    @RequestMapping("/save")//设置当前操作的访问路径
    @ResponseBody //设置当前操作的返回值类型
    public String save(@RequestParam("name") String brandName){//此时brandName就不能用了
        System.out.println("brand save.."+brandName);
        return "{'module':'brand save'}"+brandName;
    }
}

此时就可以用name来请求。

名称:@RequestParam
类型:形参注解
位置:SpringMVC控制器方法形参定义前面

作用:绑定请求参数与处理器方法形参间的关系
参数:
        required:是否为必传参数

        defaultValue:参数默认值

需要注意的是:此时形参brandName就不能用了。

Post请求中文乱码处理

在SpringMvcConfig中为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器

//处理中文乱码
@Override
protected Filter[] getServletFilters() {
    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    return new Filter[]{filter};
}

 1.3请求参数(传递json数据)

第一步:导入坐标

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.3</version>
</dependency>

第二步:在SpringMvcConfig中开启自动转换json数据的支持(@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换)

@Configuration
@ComponentScan("test.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

名称: @EnablewebMvc

类型:配置类注解
位置: SpringMVC配置类定义上方

作用:开启springMVC多项辅助功能

由于json数据是在Body里的,因此在形参前要加上@RequestBody注解

名称:@RequestBody

类型:形参注解
位置: SpringMVC控制器方法形参定义前面
作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

json数组

@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
    System.out.println("list json.."+likes);
    return "{'module':'list json'}"+likes;
}

json对象(POJO)

    @RequestMapping("/pojoParamForJson")
    @ResponseBody
    public String pojoParamForJson(@RequestBody User user){
        System.out.println("pojo json .."+user);
        return "{'module':'pojo json'}"+user;
    }

json数组(POJO)

 

@RequestMapping("/listPojoParamForJson")
@ResponseBody
public String listPojoParamForJson(@RequestBody List<User> userList){
    System.out.println("list json.."+userList);
    return "{'module':'list json'}"+userList;
}

 1.4@RequestBody与@RequestParam区别

区别

  • @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
  • @RequestBody用于接收json数据【application/json】

应用

  • 后期开发中,发送json格式数据为主,@RequestBody应用较广
  • 如果发送非json格式数据,选用@RequestParam接收请求参数

 1.5日期类型参数传递

日期类型数据基于系统不同格式也不尽相同:

  • 2088-08-18
  • 2088/08/18
  • 08/18/2088
    @RequestMapping("/dateParam")//设置当前操作的访问路径
    @ResponseBody //设置当前操作的返回值类型
    public String dataParam(Date date1,
                            @DateTimeFormat(pattern = "yyyy-MM-dd") Date  date2,
                            @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss") Date date3){
        System.out.println("date param.."+date1+date2+date3);
        return "{'module':'data param'}"+date1+date2+date3;
    }

名称:@DateTimeFormat

类型:形参注解
位置: SpringMVC控制器方法形参前面

作用:设定日期时间型数据格式
属性: pattern:日期时间格式字符串

字符串格式转化内部如何工作的呢?

类型转换器

Converter接口

public interface Converter<S,T> {
        @Nullable
        T convert(s var1);
}
  • 请求参数年龄数据(String→Integer)
  • 日期格式转换(String → Date)

如果不能进行类型转化一定要把@EnablewebMvc开启。

@EnableWebMvc功能之一:根据类型匹配对应的类型转换器

请求的学习目前到这里,那么接下来进入到响应的学习。

二、响应

 2.1响应页面

//响应页面
@RequestMapping("/toJumpPage")
public String toJumpPage() {
    System.out.println("跳转页面");
    return "page.jsp";
}

 2.2响应数据(都需要加@ResponseBody)

文本数据

//响应文本数据
@RequestMapping("/toText")
@ResponseBody
public String toText() {
    System.out.println("返回纯文本数据");
    return "response text";
}

json数据

//响应Json对象
@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO() {
    System.out.println("响应json对象数据");
    User user= new User();
    user.setAge(20);
    user.setName("Lyle");
    return user;
}

//响应POJO集合对象
@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList() {
    User user1 = new User();
    User user2 = new User();
    user1.setAge(20);
    user1.setName("Lyle");
    user2.setAge(20);
    user2.setName("ylm");
    List<User> userList = new ArrayList<>();
    userList.add(user1);
    userList.add(user2);
    System.out.println("响应POJO集合对象");
    return userList;
}

名称:@ResponseBody

类型:方法注解
位置: SpringMVC控制器方法定义上方
作用(在这换了):设置当前控制器返回值作为响应体,实现类型自动转化

新接口帮忙实现转换。

类型转换器:HttpMessageConverter接口

结语:

SpringMVC请求与响应的学习到此结束,我是Lyle,我们下次继续深入学习SpringMVC。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Lyle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值