SpringBoot自定义异常和自定义返回格式

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

首先自定义一个异常类:

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: 就是定义处理什么异常

再此调用我们的测试方法,看看会有什么不同?

按照我们自定义的格式进行返回了!

猜你喜欢

转载自blog.csdn.net/huxiaodong1994/article/details/84838807
今日推荐