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.www.zyiz.net/i/ll/?i=img_convert/74967cad038af784dc72bb8d0339e087.png) ![image](https://www.www.zyiz.net/i/ll/?i=img_convert/a67498a8af7269e2f8e3d0268f8a1953.png) ![image](https://www.www.zyiz.net/i/ll/?i=img_convert/8fdaf8ab03a2e6100aaa672898dadfdd.png) 内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补 5844248)] [外链图片转存中...(img-TZJkahA1-1631155844249)] [外链图片转存中...(img-3NgcGbht-1631155844250)] 内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补