Spring @RequestMapping日志消息?

时间:2015-11-17 19:13:05

标签: java spring jax-rs spring-rest

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

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

1 个答案:

答案 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源代码,你可以轻松编写一个更符合你需求的更好的。特别是因为ContentCachingRequestWrapperContentCachingResponseWrapper可以让您轻松获得请求和响应的副本。

除了servlet过滤器,您还可以添加HandlerInterceptor https://stackoverflow.com/a/28022330 - 您可以访问SpringMVC特定的详细信息,但无法访问请求&响应内容而不消费它们(比较https://stackoverflow.com/a/2171633