在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默认返回格式。
解决方案:

使用@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
- 祁东握力
谢谢