【发布时间】:2019-10-23 16:42:30
【问题描述】:
我必须使用 springboot 中的拦截器在请求进行之前和之后进行一些处理。但是在使用它时,我遇到了一个错误:到目前为止,我只是尝试使用 to pre-handle 方法,并且我遇到了这个问题。
org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing"
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:131)
我认为 Json 转换可能存在一些问题,所以我尝试了其他解决方案,例如 Jackson 库,我也面临同样的问题。
在这里,我必须将 HttpServletRequest 转换为 jsonObject,但我收到了上述错误。当我删除 BufferedReader 到 jsonObject 转换的以下逻辑并从 prehandle 方法返回 true 时,它可以正常工作。
代码:
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
JSONObject obj = new JSONObject(jb.toString());
System.out.println(obj);
} catch (Exception e) {
}
return super.preHandle(request, response, handler);
}
在测试邮递员的上述电话时,我得到了 400。
【问题讨论】:
-
大家好,我尝试使用 Wrapper 和缓存概念来解决这个问题。但仍然没有解决。请建议我该怎么做
标签: java spring spring-boot