在开发项目中,有的时候对于一些特殊的异常,我们需要进行别人的处理,那怎么自定义我们的异常的?话不多说,直接上干货。
    首先自定义一个异常类:

    1. public class CustomException extends RuntimeException {
    2. //可以用来接受我们方法中传的参数
    3. private String id;
    4. public CustomException(String id) {
    5. super("custom not exist");
    6. this.id = id;
    7. }
    8. public String getId() {
    9. return id;
    10. }
    11. public void setId(String id) {
    12. this.id = id;
    13. }
    14. }

    编写一个测试Controller类

    1. @RestController
    2. public class TestController {
    3. @PostMapping("/test")
    4. public void testCustom(String id) {
    5. throw new CustomException(id);
    6. }
    7. }

    当我们在post中调用这个方法时,就会跳出报错信息,如下图:
    image.png
    你以为这样就完成了嘛?重点来了,因为我们就是前后端分离的项目,这个接口是要给app调用的,对于app来说需要定义统一的接受格式,不然没有办法拿到返回的数据,所以我们需要定义自己的异常返回类型,代码如下:

    1. @ControllerAdvice
    2. public class ControllerHanderException {
    3. @ExceptionHandler(CustomException.class)
    4. @ResponseBody
    5. @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    6. //在这个方法里定义我们需要返回的格式
    7. public Map<String, Object> handleUserNotExistException(CustomException ex){
    8. Map<String, Object> result = new HashMap<>();
    9. result.put("id", ex.getId());
    10. result.put("message", ex.getMessage());
    11. return result;
    12. }
    13. }

    其中:
    @ControllerAdvice注解表示这个Controller不处理http请求,只处理当其他controller抛出异常时,进行处理。
    @ExceptionHandler: 就是定义处理什么异常
    再此调用我们的测试方法,看看会有什么不同?
    image.png
    按照我们自定义的格式进行返回了!