MethodArgumentNotValidException参数校验异常

MethodArgumentNotValidException参数校验异常

之前也学过一个类似的参数校验异常。代码是这样的:

@ResponseBody
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(Exception.class)
    public String validExceptionHandler(Exception e) {
        log.error("执行异常",e);
        if (e instanceof MethodArgumentNotValidException) {
            MethodArgumentNotValidException exception = (MethodArgumentNotValidException) e;
            //将错误信息返回给前台
            return exception.getBindingResult().getFieldError().getDefaultMessage();
        }

这是你的代码:

 @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public ApiRestResponse handleMethodArgumentNotValidException(
            MethodArgumentNotValidException e) {
        log.error("MethodArgumentNotValidException: ", e);
        return handleBindingResult(e.getBindingResult());
    }

    private ApiRestResponse handleBindingResult(BindingResult result) {
        //把异常处理为对外暴露的提示
        List<String> list = new ArrayList<>();
        if (result.hasErrors()) {
            List<ObjectError> allErrors = result.getAllErrors();
            for (ObjectError objectError : allErrors) {
                String message = objectError.getDefaultMessage();
                list.add(message);
            }
        }
        if (list.size() == 0) {
            return ApiRestResponse.error(ImoocMallExceptionEnum.REQUEST_PARAM_ERROR);
        }
        return ApiRestResponse
                .error(ImoocMallExceptionEnum.REQUEST_PARAM_ERROR.getCode(), list.toString());

想问老师:以上两个有什么区别???我看你写的挺复杂的,谢谢!


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-09-02 15:06:52

同学你好,对于上面的写法,只能处理单一的错误信息,例如“长度不在2-5之间”或者“长度高于3”中的一个。但是如果想要同时处理并返回多个信息,就需要使用下面的方式了。

所以这两者的区别在于处理的错误信息的数量是不同的,可以根据业务需要灵活选择。

祝学习愉快~

  • 提问者 魏榕汘 #1

    违反哪个规则,就返回报错信息。如果返回多个报错信息,移动端怎么显示?

    2022-09-02 15:27:15
  • 好帮手慕小蓝 回复 提问者 魏榕汘 #2

    同学你好,这里是后端的处理方式,前端需要单独进行处理。

    由于返回的数据会被处理为JSON,前端可以分别获取所有的错误信息,并根据对应的业务逻辑单独处理。

    例如课程中的案例,前端可以将商品名和类型的错误信息,分别展示在对应的输入框后。

    祝学习愉快~

    2022-09-02 15:33:23
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师