2

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

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

4

1 回答 1

6

您可以将自己的日志过滤器添加到处理链中。使用 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"

成为畸形的身体。这不是最好的过滤器,因为它忽略了有用的信息,例如 http 方法(POST、GET、..)请求所用的时间、响应......但是如果你查看它的源代码,你可以很容易地写一个更好的,以满足您的需求。特别是因为ContentCachingRequestWrapperContentCachingResponseWrapper允许您非常轻松地获得请求和响应的副本。

除了 servlet 过滤器之外,您还可以添加HandlerInterceptor类似https://stackoverflow.com/a/28022330 - 在那里您可以访问 SpringMVC 的特定详细信息,但如果不使用它们就无法访问请求和响应内容(比较https://stackoverflow. com/a/2171633

于 2015-11-17T20:22:52.480 回答