Spring - 实例化Errors对象

时间:2012-10-03 17:41:40

标签: java spring

我有这样的方法:

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

来实现此目的

6 个答案:

答案 0 :(得分:20)

ErrorsBindingResult是接口,因此无法实例化它们。您唯一的选择是使用其中一个实现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");就像是一种魅力。

enter image description here

答案 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的替代方法。