Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Errors и BindingResult являются интерфейсами, поэтому они не могут быть созданы. Единственный вариант - использовать один из классов, реализующий Errors.

Вы можете использовать org.springframework.validation.BindException, это реализует Errors - подробнее см. здесь.

Ответ 2

Другой вариант - использовать org.springframework.validation.BeanPropertyBindingResult, который реализует ошибки. Этот объект имеет тот же класс BindingResult, который вы получаете в Spring контроллерах MVC

Errors errors = new BeanPropertyBindingResult(objectToValidate, "objectName");

Ответ 3

вы можете создавать объекты класса. но Errors - это интерфейс, а не класс. следовательно, он не может быть создан таким образом, как вы пытаетесь сделать.

Ответ 4

Метод ожидает объект, реализующий интерфейс Errors. Любой класс, реализующий интерфейс Errors, будет работать. Если вы не хотите использовать существующий класс, например org.springframework.validation.BindException, вы можете использовать анонимный внутренний класс. См. Spring Docs для существующих классов, которые уже реализуют Errors. Но вашему анонимному классу потребуется реализовать все методы интерфейса, которые довольно многочисленны и затрудняют чтение вашего кода:

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

Если это приложение 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.