文章目录
- 前言
- 一、接口代码
- 1.1 代码说明
- 1.2 测试结果
- 1.3 问题解决
- 1.4 @RequestBody 作用
前言
记录接口传参报错与解决和@RequestBody的作用记录
一、接口代码
1.1 代码说明
以下面测试代码作为例子:前端发送 POST 请求,请求体里面携带 List 集合的字符串发送给后端接口,后端接口接收到前端发送的请求数据后直接返回给前端。
@PostMapping("/test")
public R test(@RequestBody List<String> list) {
return R.ok().put("data", list);
}
1.2 测试结果
报错信息:
"JSON parse error: Cannot deserialize instance of java.util.ArrayList<java.lang.Object>
out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.
MismatchedInputException: Cannot deserialize instance of
`java.util.ArrayList<java.lang.Object>` out of START_OBJECT token\n at
[Source: (PushbackInputStream); line: 1, column: 1]",
1.3 问题解决
{
"list": [
"哈哈哈!",
"呵呵呵!"
]
}
上面这种写法是 @RequestBody 注解封装 List 对象进行传递的,例如下面代码
@PostMapping("/test")
public R test(@RequestBody StringVo strVo) {
return R.ok().put("strVo", strVo);
}
@Data
public class StringVo {
public List<String> hobby;
public String name;
public Integer age;
}
重启项目,发送请求
请求体中的属性必须与StringVo类中的属性对应,若属性对应不一致则对应数据为 null,如下图:
@PostMapping("/test")
public R test(@RequestBody List<String> list) {
return R.ok().put("data", list);
}
当接口参数 @RequestBody List< String > list 时,传递的请求体如下即可:
[
"哈哈哈!",
"呵呵呵!"
]
1.4 @RequestBody 作用
@RequestBody 注解用来接收前端传递给后端的 JSON 字符串中的请求体中的数据,我们常用 POST 请求发送,所以使用 @RequestBody 接收数据时,一般都用 POST 方式进行提交,在后端的接收方法里使用@RequestBody 来修饰请求参数。
@RequestBody 注解对应的类在将 HTTP 的输入流(含请求体)装配到目标类时,会根据 JSON 字符串中的 key 来匹配对应实体类的属性,如果匹配一致且 JSON 中的该 key 对应的值符合(或可转换为)实体类的对应属性的类型要求时,会调用实体类的 setter 方法将值赋给该属。