ConstraintViolationException、BindException、MethodArgumentNotValidException的区别
public class ConstraintViolationException extends ValidationException {todo
·
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()方法,可以获取方法相关的参数;
更多推荐
已为社区贡献2条内容
所有评论(0)