我试图反序列化来自Javascript UI的JSON对象,但我一直得到400 - "客户端发送的请求在语法上是不正确的"错误。注意,我知道REST服务有效,因为如果我对JSON进行硬编码,我可以成功点击服务,但现在我试图从实际的JS对象生成JSON。
Spring是否会生成可以帮助解决这个问题的日志消息?如果是这样,那我该怎么设置呢?
答案 0 :(得分:6)
您可以将自己的日志记录过滤器添加到处理链中。使用弹簧启动只需提供以下代码:
import javax.servlet.Filter;
...
@Configuration / @SpringBootApplication
class Something {
@Bean
public Filter loggingFilter(){
return new AbstractRequestLoggingFilter() {
private final Logger log = LoggerFactory
.getLogger(Something.class);
{
setIncludeClientInfo(true);
setIncludeQueryString(true);
setIncludePayload(true);
}
@Override
protected void beforeRequest(HttpServletRequest request, String message) {
// not needed
}
@Override
protected void afterRequest(HttpServletRequest request, String message) {
log.info(message);
}
};
}
会产生与
类似的结果{timestamp and such} : After request [uri=/v1/thing/1007?null;client=127.0.0.1;payload= {
"name": "test7"
]
与
{
"name": "test7"
是一个畸形的身体。这不是最好的过滤器,因为它省略了有用的信息,例如http方法(POST,GET,..)请求所需的时间,响应,......但是如果你看一下它就会#39 ; s源代码,你可以轻松编写一个更符合你需求的更好的。特别是因为ContentCachingRequestWrapper
和ContentCachingResponseWrapper
可以让您轻松获得请求和响应的副本。
除了servlet过滤器,您还可以添加HandlerInterceptor
https://stackoverflow.com/a/28022330 - 您可以访问SpringMVC特定的详细信息,但无法访问请求&响应内容而不消费它们(比较https://stackoverflow.com/a/2171633)