spring boot处理全局异常、rest api404错误

1.当发生异常时,如果每个controller都手工处理,返回JSON ,这样太麻烦了。    


2.首先,创建一个统一的异常结果类:

public class ErrorResult {
    private String errNo;
    private String errMsg;
    private String status;

    //getter和setter略
}

3.编写一个自定义异常类

public class MyException extends  Exception {

    private String errNo;

    public MyException(String msg) {
        super(msg);
    }

    public MyException(String msg ,String errNo) {
        super(msg);
        this.errNo = errNo;
    }

    public String getErrNo() {
        return errNo;
    }

    public void setErrNo(String errNo) {
        this.errNo = errNo;
    }
}

4.使用一下两个注解,创建一个异常处理器

   @RestControllerAdvice(则会自动注册为全局异常处理器)

   并配合@ExceptionHandler(自定义的错误处理器)


@RestControllerAdvice
public class MyHandler {

    @ExceptionHandler(value = Exception.class)//默认异常处理
    public ErrorResult defaulHandler(Exception ex,HttpServletResponse response){

        ErrorResult errorResult = new ErrorResult("null",ex.getMessage(),response.getStatus());
        return errorResult;
    }

    @ExceptionHandler(value=MyException.class)//自定义异常的处理器
    public ErrorResult myHandler(MyException ex,HttpServletResponse response){

        ErrorResult errorResult = new ErrorResult(ex.getErrNo(),ex.getMessage(),response.getStatus());
        return errorResult;
    }

这时,controller出现异常时,全局处理器自动会返回异常信息;


5.当地址输入错误,报404错误时,还是不能处理,



6.这时,可以这样处理:

新增一个RestController去继承SpringBoot里面的ErrorController接口,代码如下:


@RestController
public class MyErrController implements ErrorController {

    @RequestMapping(value="/error")
    public ErrorResult myError(HttpServletResponse rs,Exception ex){
        ErrorResult er = new ErrorResult("10000",ex.getMessage(),rs.getStatus());

        return er;
    }


    @Override
    public String getErrorPath() {
        return "/error";
    }

7.异常测试:

@RestController
public class TestController {

    @RequestMapping(value = "/test",method = RequestMethod.GET)
    public String test() throws Exception {

        throw new Exception("我是测试的");
    }


    @RequestMapping(value = "/test2",method = RequestMethod.GET)
    public String test2() throws Exception {

        throw new MyException("自定义异常","10000");
    }

}

猜你喜欢

转载自blog.csdn.net/a453220542/article/details/80465318