@controllerAdvice处理全局异常,做全局统一参数返回

1、自定义异常

技巧:先定义类,以及参数,然后快捷键alt+ins选择不带参数以及只有message的方法,然后下一步选择code。记得无惨构造方法要加上

@Component
public class MyException extends RuntimeException {
    private int code = 200;

    public int getCode() {
        return code;
    }

    public MyException(int code) {
        this.code = code;
    }

    public MyException(int code,String message) {
        super(message);
        this.code = code;
    }

    public MyException() {
    }

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

2、自定义异常处理类

@RestControllerAdvice
public class ExceptionHandle {

    /**
     * 处理自定义异常
     * @param ex
     * @return
     */
    @ExceptionHandler(MyException.class)
    public Response myException(MyException ex) {
        System.out.println("全局处理异常了");
        return Response.failWithCode(ex.getCode(),ex.getMessage(),"");
    }

    /**
     * 处理总的异常,防止异常没被上面捕捉到,在这里处理
     * @param ex
     * @return
     */
    @ExceptionHandler(Exception.class)
    public Response ex(Exception ex) {
        return Response.fail(ex.getMessage());
    }
}

3、定义统一返回类

public class Response {
    public int code;
    public String message;
    public Object data;

    public static Response success(Object data) {
        Response response = new Response();
        response.setCode(200);
        response.setMessage("成功请求");
        response.setData(data);
        return response;
    }

    public static Response fail(Object data) {
        Response response = new Response();
        response.setCode(400);
        response.setMessage("成功失败");
        response.setData(data);
        return response;
    }

    public static Response failWithMsg(String msg,Object data) {
        Response response = new Response();
        response.setCode(400);
        response.setMessage(msg);
        response.setData(data);
        return response;
    }

    public static Response failWithCode(int code,String msg,Object data) {
        Response response = new Response();
        response.setCode(code);
        response.setMessage(msg);
        response.setData(data);
        return response;
    }
}

4、定义接口测试异常

 @PostMapping("/test")
    public User test(@RequestBody User user) {
        System.out.println("进入方法·····");
        throw new MyException("测试异常的···");
//        user.setId("test");
//        user.setName("test");
//        return user;
    }
image.png

aop正常记录了入参,异常处理器捕获到了异常,接口返回了自定义的对象,功能正常

你可能感兴趣的:(@controllerAdvice处理全局异常,做全局统一参数返回)