Spring MVC 中的请求与响应

目录

请求参数种类

普通参数:

url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数

请求参数名与形参变量名不同,使用@RequestParam绑定参数关系

POJO参数

嵌套POJO参数

数组参数

集合保存普通参数 

 但是!!!!最常用的是json数据!!!

请求参数(传递json数据)

请求参数(传递json对象)

请求参数(传递json数组)

 @RequestBody与@RequestParam区别

日期类型参数传递

响应

响应页面

响应文本数据

响应json数据(对象转json)

响应json数据(对象集合转json数组)


请求参数种类

普通参数

POJO类型参数

嵌套POJO类型参数

数组类型参数

集合类型参数

普通参数:

url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数

@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
   
System.out.println("普通参数传递 name ==> "+name);
   
System.out.println("普通参数传递 age ==> "+age);
   
return "{'module':'common param'}";
}

请求参数名与形参变量名不同,使用@RequestParam绑定参数关系

@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name")String userName , int age){
   
System.out.println("普通参数传递 userName ==> "+userName);
   
System.out.println("普通参数传递 age ==> "+age);
   
return "{'module':'common param different name'}";
}

POJO参数

请求参数名与形参对象属性名相同定义POJO类型形参即可接收参数

@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
   
System.out.println("pojo参数传递 user ==> "+user);
   
return "{'module':'pojo param'}";
}

嵌套POJO参数

POJO对象中包含POJO对象

public class User {
   
private String name;
   
private int age;
    private Address address;
}

public class Address {
   
private String province;
   
private String city;
}

请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

@RequestMapping("/pojoContainPojoParam")
@ResponseBody
public String pojoContainPojoParam(User user){
   
System.out.println("pojo嵌套pojo参数传递 user ==> "+user);
   
return "{'module':'pojo contain pojo param'}";
}

数组参数

请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数

@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
   
System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
   
return "{'module':'array param'}";
}

集合保存普通参数 

注:如果采用与数组同样的方式往集合里面保存数据,会报错,因为是引用类型,会构造一个集合,然后往把数据当作属性存储进去,但实际我们并不是想要这样做,此时只要@RequestParam 将其当作参数放进去即可。

@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes){
   
System.out.println("集合参数传递 likes ==> "+ likes);
   
return "{'module':'list param'}";
}

最后补充两个参数

required:是否为必传参数

defaultValue:参数默认值

 但是!!!!最常用的是json数据!!!

使用json先要导依赖

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

postman要发json数据只需要body里选择raw,然后选择json数据即可,post与get都可发送

同时需要开启自动转换json数据的支持(把传过来的json数据转为我们需要的对象)

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

但是此时仍然无法接受数据,加@requestparam也没用,因为数据在请求体里,所以应该加@RequestBody

请求参数(传递json数据)

@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
   
System.out.println("list common(json)参数传递 list ==> "+likes);
   
return "{'module':'list common for json param'}";
}

请求参数(传递json对象)

POJO参数:json数据与形参对象属性名相同,定义POJO类型形参即可接收参数

 

@RequestMapping("/pojoParamForJson")
@ResponseBody
public String pojoParamForJson(@RequestBody User user){
   
System.out.println("pojo(json)参数传递 user ==> "+user);
   
return "{'module':'pojo for json param'}";
}

请求参数(传递json

POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数

@RequestMapping("/listPojoParamForJson")
@ResponseBody
public String listPojoParamForJson(@RequestBody List<User> list){
   
System.out.println("list pojo(json)参数传递 list ==> "+list);
   
return "{'module':'list pojo for json param'}";
}

 @RequestBody@RequestParam区别

区别

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

应用

后期开发中,发送json格式数据为主,@RequestBody应用较广

如果发送非json格式数据,选用@RequestParam接收请求参数

日期类型参数传递

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

2088-08-18

2088/08/18

08/18/2088

接收形参时,根据不同的日期格式设置不同的接收方式

@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,
                       
@DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,
                       
@DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")Date date2){
   
System.out.println("参数传递 date ==> "+date);
   
System.out.println("参数传递 date(yyyy-MM-dd) ==> "+date1);
   
System.out.println("参数传递 date(yyyy/MM/dd HH:mm:ss) ==> "+date2);
   
return "{'module':'data param'}";
}

靠Converter接口实现的类型转换

Converter接口

​​​​​​​

 

请求参数年龄数据(String→Integer

json数据转对象(jsonPOJO

日期格式转换(StringDate

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

响应

响应页面

@RequestMapping("/toPage")
public String toPage(){
   
return "page.jsp";
}

响应文本数据

(前面部分传回的json数据实际上还是字符串,开发中是返回一个对象,通过添加@RequestBody去把对象自动转为json数据)

@RequestMapping("/toText")
@ResponseBody
public String toText(){
   
return "response text";
}

响应json数据(对象转json

@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
    User user =
new User();
    user.setName(
"赵云");
    user.setAge(
41);
   
return user;

}

响应json数据(对象集合转json数组)

@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList(){
    User user1 =
new User();
    user1.setName(
"赵云");
    user1.setAge(
41);
    User user2 =
new User();
    user2.setName(
"master 赵云");
    user2.setAge(
40);
    List<User> userList =
new ArrayList<User>();
    userList.add(user1);
    userList.add(user2);
   
return userList;
}

主要就是添加注解@RequestBody

名称:@ResponseBody

类型:方法注解

位置:SpringMVC控制器方法定义上方

作用:设置当前控制器返回值为响应体

由HttpMessageConverter实现,专门转换http消息的。(由jackson依赖提供)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值