前言
搭建新demo测试的时候,controller接口接收前端参数时 加了@RequestBody
注解,然后就一直报错Required request body is missing
排查
开始以为是前端请求方式不对,发现是POST
没问题 ✔
又看了数据格式和header的Content-Type
发现是application/json
也没问题 ✔
把@RequestBody
改成@RequestBody(required = false)
发现接收的body是空的
把@RequestBody
去掉后 前端用表单提交 后台接受正常
这时候突然想到demo里的加解密是通过自定义注解和实现RequestBodyAdvice
和ResponseBodyAdvice
这两个接口实现的
@Override
public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException {
//这里去判断方法中是否有自定义注解具体实现加解密
、、、
return inputMessage;
}
所有的POST
请求过来会先进RequestBodyAdvice
处理后再出去,这时候就发现问题了
解决
@Override
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
//在此处理after后的逻辑
return null;
}
由于我在afterBodyRead方法中最终返回出去了null,导致请求通过Advice后变为null,最终报错Required request body is missing
所以在完成相应逻辑操作后,返回body即可