在开发项目中,有的时候对于一些特殊的异常,我们需要进行别人的处理,那怎么自定义我们的异常的?话不多说,直接上干货。
首先自定义一个异常类:
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类
@RestControllerpublic class TestController {@PostMapping("/test")public void testCustom(String id) {throw new CustomException(id);}}
当我们在post中调用这个方法时,就会跳出报错信息,如下图: 
你以为这样就完成了嘛?重点来了,因为我们就是前后端分离的项目,这个接口是要给app调用的,对于app来说需要定义统一的接受格式,不然没有办法拿到返回的数据,所以我们需要定义自己的异常返回类型,代码如下:
@ControllerAdvicepublic 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: 就是定义处理什么异常
再此调用我们的测试方法,看看会有什么不同?
按照我们自定义的格式进行返回了!
