Spring中@ModelAttribute与@RequestBody的区别 有更新!

  |   0 评论   |   179 浏览

0.起因

最近在写毕业设计,涉及到了前后端传参的问题,主要是涉及实体类时遇到了点问题,遂记录下来。

1.前端传参方式

1.1.jQuery序列化表单

  1. $(“#xxxx_form”).serialize()

    jQuery 的 $(“#xxxx_form”).serialize()方法会把form表单的值序列化成一个字符串
    username=admin&password=admin123

  2. $(“#xxxx_form”).serializeObject()

    jQuery 的 $(“#xxxx_form”).serializeObject()方法会 把form表单的值序列化成一个json对象
    {username:admin,password:admin123}

1.2.form表单

form 标签的 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认编码为 application/x-www-form-urlencoded
最终提交的数据类似:username=admin&password=admin123

2.后端接收方式

2.1.@RequestBody

@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。
如:'{username:'admin',password:'admin123'}'

用 JSON.stringify(data)的方式就能将对象变成字符串。
同时ajax请求的时候也要指定 dataType: "json",contentType:"application/json" 
这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List

2.2.@ModelAttribute

用于接收key,value形式参数,如username=admin&password=admin123
此方法会先从model去获取key为"user"的对象,如果获取不到会通过反射实例化一个User对象,
再从request里面拿值set到这个对象,然后把这个User对象添加到model(其中key为"user")

评论

发表评论