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;
}
aop正常记录了入参,异常处理器捕获到了异常,接口返回了自定义的对象,功能正常