@RequestBody注解
此注解可以接收前端传来的一段json对象的字符串, 对没错是字符串而不是对象, 并把它封装成一个Java类(key键值必须与属性名一一对应) ,不然封装不进去!
前台Ajax异步请求
前台通过Ajax带着一串json对象的字符串与后台交互; 后台把此字符串封装成Java类并存入数据库
注意了:
- 请求方式必须为POST, 因为GET的参数是通过URL传递的, 而不是请求体传递的, 所以无法被@RequestBody注解来接收
- contentType: “application/json” 和 data: JSON.stringify(json) 必须加上, 因为@RequestBody接收的是字符串而不是json对象
- JSON.stringify()方法可以把一个json对象转化为json对象的字符串
$(function () {
$("#btn").click(function () {
var json = {"id": 5, "name": "洛昭言", "age": 19};
$.post({
url: "/getJSON",
contentType: "application/json",
data: JSON.stringify(json),
success: function (msg) {
console.log(msg + "成功了");
},
error: function () {
console.log("请求失败")
}
})
})
})
后台的业务逻辑
Commander类:
@Data
public class Commander {
private long id;
private String name;
private long age;
}
Mapper接口:
CommanderMapper.xml:
<insert id="add">
insert into commanders
values (#{commander.id},#{commander.name},#{commander.age})
</insert>
Controller:
@RequestMapping("/getJSON")
public Commander getJSON(@RequestBody Commander commander){ //封装成commander
commanderDao.add(commander); //存入数据库
return commander;
}
说明
Ajax把参数带到后台, 通过@RequestBody注解把它封装成对应的Commander类, 并存入数据库
大功告成 !