我使用Jackson/JSON将Spring REST设置得很好,一切正常。
但是我故意在消息结构中引入了一个错误,导致了一个400 - Bad请求。但是服务器上没有日志输出。我预期的错误应该是“Jackson未知属性异常”之类的,但是它被捕获了,并且向客户端发送了一个400错误,但是服务器上没有异常日志。
我不想清楚地调试服务器上的所有内容,但我希望像这样的Spring Web络级异常清楚地标记为error。
正确的开机方式是什么?
谢谢你!
我使用Jackson/JSON将Spring REST设置得很好,一切正常。
但是我故意在消息结构中引入了一个错误,导致了一个400 - Bad请求。但是服务器上没有日志输出。我预期的错误应该是“Jackson未知属性异常”之类的,但是它被捕获了,并且向客户端发送了一个400错误,但是服务器上没有异常日志。
我不想清楚地调试服务器上的所有内容,但我希望像这样的Spring Web络级异常清楚地标记为error。
正确的开机方式是什么?
谢谢你!
6条答案
按热度按时间kzmpq1sx1#
voase2hg2#
基于@Jukka的答案,您可以使用
@ControllerAdvice
(在Spring 3.2中引入)为所有控制器全局启用此功能。这确实需要您端的一些代码,但根据我的经验,您通常最终需要一个全局错误处理配置,这允许您设置断点/轻松检查问题。下面是一个示例:
zujrkrfu3#
如果其他人在这个问题上犯了错误,下面的代码在Sping Boot 2 / Spring 5中对我很有效,不需要修改代码。
我将
org.springframework.web.servlet.mvc.method.annotation
的日志级别设置为DEBUG
。在我的例子中,我在客户端代码中看到400个响应,但在服务器端没有日志记录(即使使用了自定义错误处理程序)。更改日志级别后,问题很明显:dxxyhpgq4#
您可以在
application.properties
中设定log
层级来两柴这个属性。nwnhqdif5#
在我的例子中,问题出在我的
@ControllerAdvice
-annoted类中,它扩展了ResponseEntityExceptionHandler
。当我从一些关于自定义异常处理的随机教程中获得处理程序代码时,我没有费心去检查那个超类在做什么(我的自定义异常处理工作得很好)。问题是
ResponseEntityExceptionHandler.handleException()
处理MethodArgumentNotValidException
沿着其他Spring MVC异常,将处理逻辑委托给特定的handle方法。由于我没有为任何这样的方法(在本例中为handleMethodArgumentNotValid()
)提供返回我自己的响应主体的实现,我最终使用了返回空主体响应的默认实现:)。溶液
重写所需的方法,或者根本不扩展该类。
检查ResponseEntityExceptionHandler docs以获得实现的hanler方法的列表。
mccptt676#
我不认为扩展ResponseEntityExceptionHandler是强制性的。您可以在ControllerAdvice类中创建多个处理程序方法,并使用ExceptionHandler进行注解,您可以返回任何类型的响应。请查看下面的链接以了解更多详细信息和代码示例。https://www.thetechnojournals.com/2019/11/how-to-handle-exceptions-in-rest.html