天天看点

@ControllerAdvice + @ExceptionHandler 不起作用,springboot异常处理的一些坑

在sringboot中使用@ControllerAdvice处理异常十分轻松,但是在使用的过程中踩到了个坑,浪费了一些时间。也是怪自己没有好好解读springboot的文档!

下面是我的@ControllerAdvice声明的全局异常处理类的代码:

@ControllerAdvice(basePackages = {"com.dmcn.oa"})
@ResponseBody  // 这样的话可以直接说用@RestControllerAdvice的
public class OAExceptionHandler {


	@ExceptionHandler({DuplicateKeyException.class})
	public ResponseData handleDuplicateKeyException(DuplicateKeyException e){
		logger.error(e.getMessage(), e);
		return ResponseData.error("数据库已经有这个记录,不需要再次存入",407);
	}


}
           

正常情况下当我com.dmcn.oa包下某个Controller出现异常,将会被捕捉到进行异常处理,返回我们指定的数据格式。但是这样配置返回的依然是springboot默认返回格式。

解决方案:

@ControllerAdvice + @ExceptionHandler 不起作用,springboot异常处理的一些坑

使用@ExceptionHandler注解返回值最好是Map,重要的是返回结果中键的值不能为null。

原来我自定义的返回结构中存在null,就像这样,就不会正常返回奇怪得很:

public static Map newResult(String msg, int code, Object data){
        Map map = new HashMap();
        map.put("code",code);
        map.put("msg",msg);
        map.put("data",null);
        return map;
    }
           

————————————————————————————————————————————————————————

这是我发现的坑,当然还有其他人的,这里我就把别人发现问题引过来吧,方便以后查找

  • 徐三爷
  • XuePeng77
  •  祁东握力

谢谢

继续阅读