当前位置: 首页 > 知识库问答 >
问题:

使用Jackson-400错误请求日志记录的Spring REST

楚勇
2023-03-14

我使用Jackson/JSON设置了SpringREST,一切正常。

但是我故意在消息结构中引入了一个错误,导致400-错误请求。但是服务器上没有日志输出。我期望的错误会是类似“杰克逊未知属性异常”之类的东西,但它被捕获并将400错误发送到客户端,但服务器上没有异常日志。

我不想清楚地调试服务器上的一切,但我希望像这样的Spring网络级异常清楚地标记为错误。

正确的方法是什么?

谢谢

共有3个答案

东方辉
2023-03-14

如果其他人遇到这个问题,以下在Spring Boot 2/Spring 5中对我有用,并且不需要更改代码。

我为组织设置了日志级别。springframework。网状物servlet。mvc。方法注释到调试。在我的例子中,我在客户端代码中看到了400个响应,但在服务器端没有日志记录(即使使用自定义错误处理程序)。更改该日志级别后,问题很明显:

DEBUG 172.19.0.16     cs              2018-Jun-08 20:55:08.415 [https-jsse-nio-443-exec-9] - method.annotation.RequestResponseBodyMethodProcessor[line ?] - Read [class java.lang.String] as "application/xml;charset=UTF-8" with [org.springframework.http.converter.xml.MarshallingHttpMessageConverter@2de50ee4]
DEBUG 172.19.0.16     cs              2018-Jun-08 20:55:08.418 [https-jsse-nio-443-exec-9] - method.annotation.ServletInvocableHandlerMethod[line ?] - Failed to resolve argument 0 of type 'java.lang.String'
org.springframework.beans.TypeMismatchException: Failed to convert value of type 'core.dto.RequestDTO' to required type 'java.lang.String'
缪征
2023-03-14

基于@Jukka的答案,您可以使用ControllerAdvice(在Spring 3.2中引入)为所有控制器全局启用此功能。它确实需要一点代码,但根据我的经验,您通常最终需要全局错误处理配置,这允许您设置断点/轻松检查问题。

这方面的一个例子如下:

@ControllerAdvice
public class ControllerConfig {

    @ExceptionHandler
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public void handle(HttpMessageNotReadableException e) {
        log.warn("Returning HTTP 400 Bad Request", e);
        throw e;
    }
}
籍辰沛
2023-03-14
@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
public void handle(HttpMessageNotReadableException e) {
    logger.warn("Returning HTTP 400 Bad Request", e);
}
 类似资料:
  • 问题内容: 我已经使用Jackson / JSON对Spring REST进行了很好的设置,并且一切正常。 但是我故意在消息的结构中引入了一个错误,导致400-错误的请求。但是服务器上没有日志输出。我所期望的错误将是“杰克逊未知属性异常”之类的东西,但它被捕获,并且向客户端发送了400错误,但服务器上没有该异常的日志。 我不想明确调试服务器上的所有内容,但是我想要像这样的Spring网络级异常明确

  • 我用的是Spring靴,前端有4个角。现在,我有一个数组没有被反序列化。有没有办法打开应用程序反序列化或Jackson部分的日志? 任何帮助都非常感谢。

  • 我试图通过aop在控制器中记录超文本传输协议请求。但是,在方面代码中,如果我 那么请求数据将无法在主流中检索。 所以,我创建了另一个公共方法,在控制器中传递请求字符串 这种方法是记录“数据”的切入点。 但问题是,这种方法的切入点似乎无法通过Spring识别,这种方法没有日志记录。我需要帮助。 下面是aop的定义

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 目标是通过ajax将对象发送到另一台服务器,这是我为CORS设置的,下面是代码。ajax代码片段: 正确发布数据,但使用