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