在开发项目中,有的时候对于一些特殊的异常,我们需要进行别人的处理,那怎么自定义我们的异常的?话不多说,直接上干货。
首先自定义一个异常类:
public class CustomException extends RuntimeException {
//可以用来接受我们方法中传的参数
private String id;
public CustomException(String id) {
super("custom not exist");
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
编写一个测试Controller类
@RestController
public class TestController {
@PostMapping("/test")
public void testCustom(String id) {
throw new CustomException(id);
}
}
当我们在post中调用这个方法时,就会跳出报错信息,如下图:
你以为这样就完成了嘛?重点来了,因为我们就是前后端分离的项目,这个接口是要给app调用的,对于app来说需要定义统一的接受格式,不然没有办法拿到返回的数据,所以我们需要定义自己的异常返回类型,代码如下:
@ControllerAdvice
public class ControllerHanderException {
@ExceptionHandler(CustomException.class)
@ResponseBody
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
//在这个方法里定义我们需要返回的格式
public Map<String, Object> handleUserNotExistException(CustomException ex){
Map<String, Object> result = new HashMap<>();
result.put("id", ex.getId());
result.put("message", ex.getMessage());
return result;
}
}
其中:
@ControllerAdvice注解表示这个Controller不处理http请求,只处理当其他controller抛出异常时,进行处理。
@ExceptionHandler: 就是定义处理什么异常
再此调用我们的测试方法,看看会有什么不同?
按照我们自定义的格式进行返回了!