本文介绍 Spring Boot 使用 @ExceptionHandler
注解处理 REST API 异常的方法。
@ExceptionHandler
工作在 Controller 层,此方法有个明显的缺陷:@ExceptionHandler
注解的方法只对当前 Controller 有效,并不对整个应用生效,所以为每个 Controller 都添加此注解方法并不适用于通用异常处理。当然还可以为所有的 Controller 定义一个统一的父类,将 @ExceptionHandler
注解的方法定义在父类中,但是继承本身就存在其它的问题。
代码示例:
package tutorial.spring.boot.mvc.controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/exception")
public class ExceptionHandlerController {
@GetMapping("/illegal/state")
public String illegalState() {
throw new IllegalStateException();
}
@GetMapping("/illegal/argument")
public String illegalArgument() {
throw new IllegalArgumentException();
}
@GetMapping("/unsupported/operation")
public String unsupportedOperation() {
throw new UnsupportedOperationException();
}
@ExceptionHandler({IllegalStateException.class, IllegalArgumentException.class})
public String handleIllegalException(Exception e) {
return "handleIllegalException worked: " + e;
}
@ExceptionHandler(UnsupportedOperationException.class)
public String handleUnsupportedException(Exception e) {
return "handleUnsupportedException worked: " + e;
}
}
网友评论