@RequestParam,Java培训视频百度云




1、@ModelAttribute可以注释在方法上,在用@RequestMapping注解的控制器方法被调用之前调用@ModelAttribute方法。



2、当作为方法的参数使用,指示的参数应该从模型中检索。如果不存在,它应该首先实例化,然后添加到模型中,一旦出现在模型中,参数字段应该从具有匹配名称的所有请求参数中填充。



三、@RequestParam和@ModelAttribute的区别

----------------------------------



1.  @ModelAttribute:绑定整个Java对象(如Employee)。支持多个请求参数

2.  @RequestParam:结合一个单一的请求参数(像的firstName)

3.  @RequestParam是最适合读出一小则params的。

4.  @ModelAttribute用于具有大量字段的表单。

5.  @ModelAttribute为您提供了额外的功能,如数据绑定,验证和形式预先填充。

6.  当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、数组、集合、对象等等



四、@RequestBody

--------------



### 1、@RequestBody简介



@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);



@RequestBody用于post请求,不能用于get请求。



注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。



注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、数组、集合、对象等等(即:当,@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。



即:如果参数时放在请求体中,application/json传入后台的话,那么后台要用@RequestBody才能接收到;



如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或形参前什么也不写也能接收。



如果后端参数是一个对象,且该参数前是以@RequestBody修饰的,那么前端传递json参数时,必须满足以下要求:



1.  后端@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类)时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合(或可转换为), 实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。

2.  json字符串中,如果value为""的话,后端对应属性如果是String类型的,那么接受到的就是"",如果是后端属性的类型是Integer、Double等类型,那么接收到的就是null。

3.  json字符串中,如果value为null的话,后端对应收到的就是null。

4.  如果某个参数没有value的话,在传json字符串给后端时,要么干脆就不把该字段写到json字符串中;要么写value时, 必须有值,null  或""都行。



### 2、传入list



@GetMapping("/getUserLogin")

public String getUserLogin(@RequestBody UserLogin userLogin,

@RequestParam(“arrays”) List arrays){

StringBuilder sb = new StringBuilder();

for(String array : arrays){

    sb.append(array);

    sb.append(",");

}

return sb + "," +  userLogin;

}




### 3、核心逻辑分析



@RequestBody接受json时,核心逻辑分析示例



假设前端传的json串是这样的: {"name1":"素小暖","age":18} 后端的模型只有name和age属性,以及对应的setter/getter方法;给出一般用到的deserializeFromObject(JsonParser p, DeserializationContext ctxt)方法的核心逻辑:


### Java核心架构进阶知识点

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](

)**

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

![image](https://www.icode9.com/i/ll/?i=img_convert/74967cad038af784dc72bb8d0339e087.png)

![image](https://www.icode9.com/i/ll/?i=img_convert/a67498a8af7269e2f8e3d0268f8a1953.png)

![image](https://www.icode9.com/i/ll/?i=img_convert/8fdaf8ab03a2e6100aaa672898dadfdd.png)

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

5844248)]

[外链图片转存中...(img-TZJkahA1-1631155844249)]

[外链图片转存中...(img-3NgcGbht-1631155844250)]

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

上一篇:cacheable注解和requestparam注解


下一篇:@RequestParam 如何将参数绑定到对象上