我试图反序列化来自 Javascript UI 的 JSON 对象,但我不断收到 400 -“客户端发送的请求在语法上不正确”错误。请注意,我知道 REST 服务可以正常工作,因为如果我对 JSON 进行硬编码,我就可以成功访问该服务,但现在我尝试从实际的 JS 对象生成 JSON。
Spring 是否会生成有助于解决此问题的日志消息?如果是这样,那么我该如何设置呢?
最佳答案
您可以将自己的日志记录过滤器添加到处理链中。使用 Spring Boot 只需提供以下示例:
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"
是一个畸形的 body 。这不是最好的过滤器,因为它忽略了有用的信息,例如 http 方法(POST、GET、..)、请求所花费的时间、响应……但是如果您查看它的源代码,您可以轻松地了解写一个更好的适合您的需要的。特别是因为 ContentCachingRequestWrapper
和 ContentCachingResponseWrapper
允许您非常轻松地获取请求和响应的副本。
除了servlet过滤器之外,您还可以添加一个HandlerInterceptor
,例如https://stackoverflow.com/a/28022330 - 在那里,您可以访问 SpringMVC 的特定详细信息,但您无法在不使用它们的情况下访问请求和响应内容(比较 https://stackoverflow.com/a/2171633 )
关于java - Spring @RequestMapping 日志消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33765171/