spring mvc +@Valid +@RequestBody 来做参数校验返回400,并且不显示具体message 如何解决? 400 报错
spring mvc +@Valid +@RequestBody 来做参数校验返回400,并且不显示具体message 如何解决
-----------------
时间2018年7月5日14:44:07
已解决
@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<String,String> errorMap = new HashMap<>(); logger.error("拦截异常-",ex); //参数错误 if(ex instanceof MethodArgumentNotValidException){ BindingResult result = ((MethodArgumentNotValidException) ex).getBindingResult(); wrapperError(result,errorMap); return new ResponseEntity<Object>(errorMap, HttpStatus.OK); } //其他错误 errorMap.put("401","系统错误,请稍后再试"); return new ResponseEntity<Object>(errorMap, HttpStatus.OK); } private void wrapperError(BindingResult result,Map<String,String> errorMap){ List<ObjectError> list = result.getAllErrors(); String eMsg = ""; if(list.size() > 0){ eMsg = list.get(0).getDefaultMessage(); } errorMap.put("code","102"); errorMap.put("msg",eMsg); } }
异常拦截类做校验异常拦截了吗?######好了,知道了, 在 ex里有具体信息。 转换成 MethodArgumentNotValidException 后,能获取到具体的参数及信息。######拦截确实可以,但是 message 错误信息 获取不到啊 。 比如 @NotEmpty(message = "用户不能为空") , 我要向前端返回 具体的参数错误信息。######
400是客户端错误,也就是浏览器传参有问题,最简单的就是参数一个一个去掉,看去掉哪个参数不报错时就是那个参数有问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。