问题:
使用SpringBoot开发接口时,经常使用@RequestParam("parmName")
注解来绑定单个前端传递过来的属性,当属性过多时怎么办,写一堆@RequestParam
吗?显然不是;在没有使用SpringBoot开发之前我是从request中获取参数的Map对象,然后使用工具类将Map转化成Bean对象。但是还是有点麻烦,在使用SpringBoot后是否可以简单一点,答案是肯定的,这就要用到@RequestBody
注解了;
看下面代码:
- 后端代码
@RestController
public class UserController {
@PostMapping("/register")
public String register(@RequestBody User user){
System.out.println(user);
return "success";
}
@PostMapping("/register_01")
public void register_01(@RequestBody List<User> user){
System.out.println(user);
return;
}
@PostMapping("/register_02")
public void register_02(@RequestBody Map<String,String> user){
System.out.println(user.get("name"));
return;
}
}
- 前端代码
const aa = {name:"xiaoming",sex:"man",age:20,phone:"18899998888"};
const bb = {name:"xiaoming",sex:"man",age:20,phone:"18899998888"};
const cc = {name:"xiaoming",sex:"man",age:20,phone:"18899998888"};
const tt = [aa,bb,cc];
const test = JSON.stringify(tt);
console.log(test);
$.ajax({
url: "/register",
type: "post",
async: false,
dataType:"json",
data:JSON.stringify(aa),
contentType:"application/json;charset=utf-8",
success: function (data) {
console.log(data);
}
});
$.ajax({
url: "/register_02",
type: "post",
async: false,
dataType:"json",
data:JSON.stringify(aa),
contentType:"application/json;charset=utf-8",
success: function (data) {
console.log(data);
}
});
- 注意 1 :在使用@RequestBody绑定对象是不能使用Get方法请求,会报下面的错:
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
原因是使用get方法请求时数据会被放到url后面就像下面:
Request URL: http://localhost:8080/register_02?{%22name%22:%22xiaoming%22,%22sex%22:%22man%22,%22age%22:20,%22phone%22:%2218899998888%22}
当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现这个错误。参考链接
-
注意 2 : 前端向后端传递数据时需要注意两点
1、需要设置contentType:“application/json;charset=utf-8”
2、data参数发送的不能时
json
对象,如:{name:xiaoming,age:26,sex:man}
,需要使用JSON.Stringify(xx)
将数据转化为json
字符串;
上面的案例是在前后端没有分离时的的方法,如果时前后端分离需要传递对象参考:https://blog.csdn.net/weixin_43474695/article/details/104995443