Spring Boot REST API 错误处理 - @ExceptionHandler

本文介绍 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;
    }
}

你可能感兴趣的:(Spring Boot REST API 错误处理 - @ExceptionHandler)