美文网首页运营相关
Spring Boot REST API 错误处理 - @Con

Spring Boot REST API 错误处理 - @Con

作者: 又语 | 来源:发表于2020-04-16 22:01 被阅读0次

本文介绍 Spring Boot 使用 @ControllerAdvice 注解处理 REST API 异常的方法。


目录

  • @ControllerAdvice 简介
  • 代码示例

@ControllerAdvice 简介

@ControllerAdvice 是一种特殊的 @Component,用于标识类。这个类中被 @ExceptionHandler@InitBinder@ModelAttribute 注解标识的方法将作用于所有 @Controller 的接口上。

@ControllerAdvice@ExceptionHandler 一同使用时可被用来处理全局异常。

注意:还有一个同 @ControllerAdvice 用途相同的类用于直接处理 REST API 异常:@RestControllerAdvice


代码示例

  1. 定义全局异常处理类
package tutorial.spring.boot.mvc.handler;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler({IllegalStateException.class, IllegalArgumentException.class})
    @ResponseBody
    public String handleIllegalException(Exception e) {
        return "GlobalExceptionHandler handleIllegalException worked: " + e;
    }

    @ExceptionHandler(UnsupportedOperationException.class)
    @ResponseBody
    public String handleUnsupportedException(Exception e) {
        return "GlobalExceptionHandler handleUnsupportedException worked: " + e;
    }
}
  1. 定义两个抛出不同异常的 Controller 类。

ExceptionController1

package tutorial.spring.boot.mvc.controller;

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 ExceptionController1 {

    @GetMapping("/illegal/state")
    public String illegalState() {
        throw new IllegalStateException();
    }

    @GetMapping("/illegal/argument")
    public String illegalArgument() {
        throw new IllegalArgumentException();
    }
}

ExceptionController2

package tutorial.spring.boot.mvc.controller;

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 ExceptionController2 {

    @GetMapping("/unsupported/operation")
    public String unsupportedOperation() {
        throw new UnsupportedOperationException();
    }
}
  1. 启动应用验证

3.1 浏览器访问 http://127.0.0.1:8080/exception/unsupported/operation

GlobalExceptionHandler handleUnsupportedException worked: java.lang.UnsupportedOperationException

3.2 浏览器访问 http://127.0.0.1:8080/exception/illegal/state

GlobalExceptionHandler handleIllegalException worked: java.lang.IllegalStateException

3.3 浏览器访问 http://127.0.0.1:8080/exception/illegal/argument

GlobalExceptionHandler handleIllegalException worked: java.lang.IllegalArgumentException

相关文章

网友评论

    本文标题:Spring Boot REST API 错误处理 - @Con

    本文链接:https://www.haomeiwen.com/subject/mmldvhtx.html