gpt4 book ai didi

java - SpringMVC 处理剩余 Controller 中的错误

转载 作者:行者123 更新时间:2023-12-02 19:32:19 25 4
gpt4 key购买 nike

我正在使用 SpringMVC,我想处理其余 Controller 上的异常。我的 Controller 通常在响应输出中写入 json,但是当发生异常时我无法捕获它并返回 tomcat html 页面。

如何捕获全局异常并根据请求中的“accept”参数返回适当的响应?

最佳答案

@ControllerAdvice注解是 Spring 3.2 版本中添加的新注解。来自 reference docs :

Classes annotated with @ControllerAdvice can contain @ExceptionHandler, @InitBinder, and @ModelAttribute methods and those will apply to @RequestMapping methods across controller hierarchies as opposed to the controller hierarchy within which they are declared. @ControllerAdvice is a component annotation allowing implementation classes to be auto-detected through classpath scanning.

示例:

@ControllerAdvice
class GlobalControllerExceptionHandler {

// Basic example
@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
ErrorMessage handleException(FirstException ex) {
ErrorMessage errorMessage = createErrorMessage(ex);
return errorMessage;
}

// Multiple exceptions can be handled
@ExceptionHandler({SecondException.class, ThirdException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
ErrorMessage handleException() {
ErrorMessage errorMessage = createErrorMessage(...);
return errorMessage;
}

// Returning a custom response entity
@ExceptionHandler
ResponseEntity<ErrorMessage> handleException(OtherException ex) {
ErrorMessage errorMessage = createErrorMessage(...);
ResponseEntity<ErrorMessage> responseEntity = new ResponseEntity<ErrorMessage>(errorMessage, HttpStatus.BAD_REQUEST);
return responseEntity;
}
}

基本上,它允许您捕获指定的异常,创建一个自定义的 ErrorMessage (这是您的自定义错误类,Spring 将根据 Accept 序列化到响应正文> header ),并在此示例中将响应状态设置为 400 - 错误请求。请注意,最后一个示例返回 ResponseEntity (并且@ResponseBody注释),它允许您以编程方式指定响应状态和其他响应 header 。有关 @ExceptionHandler 的更多信息可以在 reference docs 中找到。 ,或在 blog post 中这是我前段时间写的。

更新:根据评论添加更多示例。

关于java - SpringMVC 处理剩余 Controller 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16303271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com