isa*_*zan 1 java spring json spring-mvc
我正在开发一个Spring MVC应用程序.我写了一个mvc:拦截器来打印传入请求的JSON内容.我尝试了两种方法,但两种方法都不起作用.
使用getReader()的第一种方法不起作用,因为getReader()只能被调用一次,它似乎已被容器调用,因此建议使用ServletInputStream接口.我有以下代码:
public class RequestInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(RequestInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
logger.info("Received HTTP request with URL:" + request.getRequestURL());
ServletInputStream in = request.getInputStream();
byte[] buf = new byte[1000];
StringBuilder sb = new StringBuilder();
for (int nChunk = in.read(buf); nChunk!=-1; nChunk = in.read(buf))
{
sb.append(new String (buf, 0, nChunk));
}
logger.info("Request JSON Content" + sb.toString());
return true;
}
...
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是,在它通过拦截器并进入弹簧控制器后,它没有输入,可能是因为我的函数已经读取了输入.
我收到以下日志消息:
INFO : com.feelstream.server.interceptors.RequestInterceptor - Received HTTP request with URL:http://localhost:8090/server/FsServer/push_event
INFO : com.feelstream.server.interceptors.RequestInterceptor - Request JSON Content{
"evt_time":7,
"cell_id":7866,
"cell_lac":31,
"device_id":"62c7c7042511c086",
...
}
DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor - Reading [class com.feelstream.utils.Event] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@4bec03a6]
DEBUG: org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Resolving exception from handler [public com.feelstream.utils.Response com.feelstream.server.controller.FsController.pushEvent(com.feelstream.utils.Event,org.springframework.validation.BindingResult)]: org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: No content to map due to end-of-input
at [Source: org.apache.catalina.connector.CoyoteInputStream@62818036; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at [Source: org.apache.catalina.connector.CoyoteInputStream@62818036; line: 1, column: 1]
Run Code Online (Sandbox Code Playgroud)
以撒,
您应该能够像任何其他过滤器一样添加此过滤器
<filter>
<filter-name>commonsRequestLoggingFilter</filter-name>
<filter-class>org.springframework.web.filter.CommonsRequestLoggingFilter</filter-class>
<init-param>
<param-name>includePayload</param-name>
<param-value>true</param-value>
</init-param>
</filter>
Run Code Online (Sandbox Code Playgroud)
在您的web.xml中
这将在Spring读取之前记录消息.如果需要其他日志记录,可以扩展此过滤器并添加更多功能.
| 归档时间: |
|
| 查看次数: |
3534 次 |
| 最近记录: |