public class ConstraintViolationException extends ValidationException {

一、BindException 

public class BindException extends Exception implements BindingResult {
    private final BindingResult bindingResult;

    public BindException(BindingResult bindingResult) {
        Assert.notNull(bindingResult, "BindingResult must not be null");
        this.bindingResult = bindingResult;
    }
...
如果在Controller层中已经声明过BindingResult来获取信息则不会再抛出BindException,如果不在具体的Controller获取信息,可以统一通过捕获BindException处理BindingResult中的信息;

二、MethodArgumentNotValidException

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.web.bind;

import java.util.Iterator;
import org.springframework.core.MethodParameter;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;

public class MethodArgumentNotValidException extends BindException {
    private final MethodParameter parameter;

    public MethodArgumentNotValidException(MethodParameter parameter, BindingResult bindingResult) {
        super(bindingResult);
        this.parameter = parameter;
    }

    public final MethodParameter getParameter() {
        return this.parameter;
    }

    public String getMessage() {
        StringBuilder sb = (new StringBuilder("Validation failed for argument [")).append(this.parameter.getParameterIndex()).append("] in ").append(this.parameter.getExecutable().toGenericString());
        BindingResult bindingResult = this.getBindingResult();
        if (bindingResult.getErrorCount() > 1) {
            sb.append(" with ").append(bindingResult.getErrorCount()).append(" errors");
        }

        sb.append(": ");
        Iterator var3 = bindingResult.getAllErrors().iterator();

        while(var3.hasNext()) {
            ObjectError error = (ObjectError)var3.next();
            sb.append('[').append(error).append("] ");
        }

        return sb.toString();
    }
}

可以看到MethodArgumentNotValidException是BindException的子类,

MethodArgumentNotValidException中getMessage()对BindingResult信息做个字符串处理,可以直接用该方法获取信息;还提供了getParameter()方法,可以获取方法相关的参数;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐