我有这样的方法:
public boolean validateMessage(String message, Errors errors) {
if (!StringUtils.hasLength(message)) {
errors.rejectValue(wrapperName + "message", "EMPTY_MESSAGE", EMPTY_MESSAGE_ERRORMSG) ;
return false ;
}
return true ;
}
我想用一个新的Errors
对象调用此方法,例如:
boolean result = validateMessage("hi", new Errors()) ;
但是,Errors
不允许这种实例化。请指教。
如果不是Errors
,我是否可以使用空(新)BindingResult
答案 0 :(得分:20)
Errors
和BindingResult
是接口,因此无法实例化它们。您唯一的选择是使用其中一个实现Errors
的类。
您可以使用org.springframework.validation.BindException
,这可以实现Errors
- see here for details。
答案 1 :(得分:12)
另一种选择是使用org.springframework.validation.BeanPropertyBindingResult,它实现了错误。该对象与您在Spring MVC控制器中接收的BindingResult属于同一类
Errors errors = new BeanPropertyBindingResult(objectToValidate, "objectName");
答案 2 :(得分:1)
您可以实例化类对象。但是Errors
是一个接口,而不是一个类。因此,它不能像你想要的那样被实例化。
答案 3 :(得分:1)
首先,由于这是一个接口,因此无法初始化Errors对象。
我正在尝试为我的JUnit测试用例初始化Errors对象。在Spring中有许多错误的实现方式(我在下面附上了一张图片)。
我尝试了new EscapedErrors(null)
,但是它的构造方法本身希望传递Errors对象。
解决方案:
org.springframework.validation.BeanPropertyBindingResult
的构造函数如下所示:
public BeanPropertyBindingResult(Object target, String objectName) {
this(target, objectName, true, Integer.MAX_VALUE);
}
所以对我来说,Errors errors = new BeanPropertyBindingResult(new Object(), "dummy");
就像是一种魅力。
答案 4 :(得分:0)
该方法期望一个实现Errors
接口的Object。任何实现Errors接口的类都可以工作。如果您不想使用现有的类,例如org.springframework.validation.BindException
,则可以使用匿名内部类。有关已实施Errors
的现有类,请参阅the Spring Docs。但是你的匿名类需要实现所有的接口方法,这些方法很多,并且使你的代码越来越难以阅读:
boolean result = validateMessage( "hi", new Errors() {
@Override
public void setNestedPath(String nestedPath) {
// TODO Auto-generated method stub
}
@Override
public void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage) {
// TODO Auto-generated method stub
}
@Override
public void rejectValue(String field, String errorCode, String defaultMessage) {
// TODO Auto-generated method stub
}
@Override
public void rejectValue(String field, String errorCode) {
// TODO Auto-generated method stub
}
@Override
public void reject(String errorCode, Object[] errorArgs, String defaultMessage) {
// TODO Auto-generated method stub
}
@Override
public void reject(String errorCode, String defaultMessage) {
// TODO Auto-generated method stub
}
@Override
public void reject(String errorCode) {
// TODO Auto-generated method stub
}
@Override
public void pushNestedPath(String subPath) {
// TODO Auto-generated method stub
}
@Override
public void popNestedPath() throws IllegalStateException {
// TODO Auto-generated method stub
}
@Override
public boolean hasGlobalErrors() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasFieldErrors(String field) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasFieldErrors() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasErrors() {
// TODO Auto-generated method stub
return false;
}
@Override
public String getObjectName() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getNestedPath() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<ObjectError> getGlobalErrors() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getGlobalErrorCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public ObjectError getGlobalError() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getFieldValue(String field) {
// TODO Auto-generated method stub
return null;
}
@Override
public Class getFieldType(String field) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<FieldError> getFieldErrors(String field) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<FieldError> getFieldErrors() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getFieldErrorCount(String field) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getFieldErrorCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public FieldError getFieldError(String field) {
// TODO Auto-generated method stub
return null;
}
@Override
public FieldError getFieldError() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getErrorCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public List<ObjectError> getAllErrors() {
// TODO Auto-generated method stub
return null;
}
@Override
public void addAllErrors(Errors errors) {
// TODO Auto-generated method stub
}
} );
答案 5 :(得分:0)
如果这是一个Spring MVC应用程序并且您正在使用@Controllers,那么您可以以org.springframework.validation.BindingResult
的形式传递验证对象,作为映射的一部分:
@RequestMapping(value="login.htm", method=RequestMethod.POST)
public String doLogin(HttpServletRequest request, Model model, BindingResult errors) {
// ..... some validation code
String message = "My message";
boolean valid = validateMessage(message, errors);
// .... some more code
}
这是明确实例化org.springframework.validation.Errors
的替代方法。