Spring @RequestMapping日志消息?

Mr *_*ith 2 java spring jax-rs spring-rest

我试图反序列化来自Javascript UI的JSON对象,但我一直得到400 - "客户端发送的请求语法不正确"错误.注意,我知道REST服务有效,因为如果我对JSON进行硬编码,我可以成功地使用该服务,但现在我正在尝试从实际的JS对象生成JSON.

Spring是否会生成可以帮助解决这个问题的日志消息?如果是这样,那我该怎么设置呢?

zap*_*apl 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);
            }
        };
    }
Run Code Online (Sandbox Code Playgroud)

结果类似于

{timestamp and such} : After request [uri=/v1/thing/1007?null;client=127.0.0.1;payload=  {
    "name": "test7"
  ]
Run Code Online (Sandbox Code Playgroud)

   {
        "name": "test7"
Run Code Online (Sandbox Code Playgroud)

是一个畸形的身体.这不是最好的过滤器,因为它省略了有用的信息,例如http方法(POST,GET,..)请求所需的时间,响应,......但是如果你看一下它的源代码就可以很容易写一个更符合你需求的更好的产品.特别是因为ContentCachingRequestWrapper并且ContentCachingResponseWrapper允许您非常轻松地获得请求和响应的副本.

除了servlet过滤器,您还可以添加HandlerInterceptor类似/sf/answers/1961563131/ - 您可以访问SpringMVC特定的详细信息,但无法访问请求和响应内容而不使用它们(比较https:// stackoverflow. com/a/2171633)