使用场景:
使用spring mvc 4的业务controller中的一个处理请求的方法
public ResponseEntity comment(@RequestBody @Valid OrderCommentReq req)
.......................................
这里 OrderCommentReq 请求用来接收app端的json格式的参数,
public class OrderCommentReq extends BaseReq{
@NotEmpty(message = "未登录")
private String token;
。。。。。。。。。
不符合参数规范的请求会返回 http status 400。 这样客户端并不能获取具体错误信息,很不友好。
须用异常拦截器来拦截后统一处理:
@ControllerAdvice
public class ExceptionHandlerController {
private static Logger logger = LoggerFactory.getLogger(ExceptionHandlerController.class);
@ExceptionHandler(value = {Exception.class})
public ResponseEntity hadlerException(final Exception ex, final WebRequest req){
Map errorMap = new HashMap<>();
logger.error("拦截异常-",ex);
//参数错误
if(ex instanceof MethodArgumentNotValidException){
BindingResult result = ((MethodArgumentNotValidException) ex).getBindingResult();
wrapperError(result,errorMap);
new ResponseEntity(errorMap, HttpStatus.OK);
}
//其他错误
errorMap.put("401","系统错误,请稍后再试");
return new ResponseEntity(errorMap, HttpStatus.OK);
}
private void wrapperError(BindingResult result,Map errorMap){
List list = result.getAllErrors();
String eMsg = "";
if(list.size() > 0){
eMsg = list.get(0).getDefaultMessage();
}
errorMap.put("code","102");
errorMap.put("msg",eMsg);
}
}
这样就可以返回 http status 200 的带具体参数错误信息的json数据。