我正在尝试建立一个大型的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更容易处理的前提下为我指出正确的方向?
3 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
我认为ResponseEntityExceptionHandler符合您的要求。HTTP 400的示例代码片段:
@ControllerAdvice
public class MyExceptionHandler extends ResponseEntityExceptionHandler {
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler({HttpMessageNotReadableException.class, MethodArgumentNotValidException.class,
HttpRequestMethodNotSupportedException.class})
public ResponseEntity<Object> badRequest(HttpServletRequest req, Exception exception) {
// ...
}
}
添加回答
举报
0/150
提交
取消