Spring Boot REST服务异常处理

我正在尝试建立一个大型的REST服务服务器。我们正在使用Spring Boot 1.2.1,Spring 4.1.5和Java8。我们的控制器正在实现@RestController和标准的@RequestMapping注释。

我的问题是Spring Boot为控制器异常设置了默认重定向到/error。从文档:

Spring Boot默认提供一个/ error映射,以一种明智的方式处理所有错误,并且在servlet容器中注册为“全局”错误页面。

对使用Node.js编写REST应用程序已有多年的经验,对我而言,这绝非明智之举。服务端点生成的任何异常都应在响应中返回。我不明白为什么您要将重定向发送到最有可能是Angular或JQuery SPA使用者的地方,该使用者只是在寻找答案,不能或不会对重定向采取任何措施。

我想做的是设置一个可以接受任何异常的全局错误处理程序-有目的地从请求映射方法抛出,或者由Spring自动生成(如果未为请求路径签名找到处理程序方法,则为404),然后返回标准格式的错误响应(400、500、503、404)到客户端,而无需任何MVC重定向。具体来说,我们将处理错误,使用UUID将其记录到NoSQL,然后将正确的HTTP错误代码与JSON正文中的日志条目的UUID返回给客户端。

文档对如何执行此操作一直含糊不清。在我看来,您必须创建自己的ErrorController实现或以某种方式使用ControllerAdvice,但是我所看到的所有示例仍然包括将响应转发到某种错误映射,这没有帮助。其他示例建议您必须列出要处理的每个Exception类型,而不仅仅是列出“ Throwable”并获取所有内容。

谁能告诉我我错过了什么,或者在没有暗示Node.js更容易处理的前提下为我指出正确的方向?


慕标5832272
浏览 1011回答 3
3回答

沧海一幻觉

我认为ResponseEntityExceptionHandler符合您的要求。HTTP 400的示例代码片段:@ControllerAdvicepublic class MyExceptionHandler extends ResponseEntityExceptionHandler {&nbsp; @ResponseStatus(value = HttpStatus.BAD_REQUEST)&nbsp; @ExceptionHandler({HttpMessageNotReadableException.class, MethodArgumentNotValidException.class,&nbsp; &nbsp; &nbsp; HttpRequestMethodNotSupportedException.class})&nbsp; public ResponseEntity<Object> badRequest(HttpServletRequest req, Exception exception) {&nbsp; &nbsp; // ...&nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP