@ControllerAdvice
public class ValidParamExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Map<String, Object> allExceptionHandler(Exception e){
Map<String, Object> map = new HashMap<>(2);
if(e instanceof BindException) {
BindException ex = (BindException)e;
BindingResult bindingResult = ex.getBindingResult();
StringBuilder errMsg = new StringBuilder(bindingResult.getFieldErrors().size() * 16);
errMsg.append("Invalid request:");
for (int i = 0 ; i < bindingResult.getFieldErrors().size() ; i++) {
if(i > 0) {
errMsg.append(",");
}
FieldError error = bindingResult.getFieldErrors().get(i);
errMsg.append(error.getField()+":"+error.getDefaultMessage());
}
map.put("errcode", 500);
map.put("errmsg", errMsg.toString());
}
else {
map.put("errcode", 500);
map.put("errmsg", e.getMessage());
}
return map;
}
(1)这里@ControllerAdvice注解标注,@ControllerAdvice是@Controller的增强版,一般与@ExceptionHandler搭配使用。
如果标注@Controller,异常处理只会在当前controller类中的方法起作用,但是使用@ControllerAdvice,则全局有效。
(2)@ExceptionHandler注解里面填写想要捕获的异常类class对象