开发者社区> 问答> 正文

spring mvc +@Valid +@RequestBody 来做参数校验返?400报错

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);
    }
}

展开
收起
爱吃鱼的程序员 2020-05-31 00:42:02 1105 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    异常拦截类做校验异常拦截了吗?######好了,知道了, 在 ex里有具体信息。 转换成 MethodArgumentNotValidException 后,能获取到具体的参数及信息。######拦截确实可以,但是 message 错误信息 获取不到啊 。 比如 @NotEmpty(message = "用户不能为空") , 我要向前端返回 具体的参数错误信息。######

    400是客户端错误,也就是浏览器传参有问题,最简单的就是参数一个一个去掉,看去掉哪个参数不报错时就是那个参数有问题。

    2020-05-31 00:42:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
workshop专场-微服务专场-开发者动手实践营-微服务-Spring Cloud Alibaba 微服务全家桶体验 立即下载
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载

相关实验场景

更多