Настройка имени и кода пользовательского поля

Я пытаюсь использовать Bean Validation для проверки в моем приложении Spring. У меня есть поле ниже, определенное в моем bean-компоненте -

@NotNull(message = "CUSTOMERROR-1000")
private String firstName;

Здесь я определил CUSTOMERROR-1000 как «Поле является обязательным» в моем файле свойств. В моем классе ControllerAdvice я могу получить детали, используя приведенный ниже код:

getBindingResult().getFieldError().getField()
getBindingResult().getFieldError().getCode()
getBindingResult().getFieldError().getDefaultMessage()

Здесь я получаю имя поля как firstName. Есть ли способ аннотировать поле и установить значение как «Имя»? Аналогично, есть ли способ установить значение кода с помощью аннотации?


person Punter Vicky    schedule 25.08.2015    source источник
comment
Я аннотировал поле (firstName) в компоненте, чтобы использовать проверку JSR-303. Используя эту строку getBindingResult().getFieldError().getField() , я могу получить имя поля firstName. Я могу получить сообщение по умолчанию, используя эту строку getBindingResult().getFieldError().getDefaultMessage(). Однако есть ли способ передать код ошибки клиента, аналогичный сообщению по умолчанию. Например: @NotNull(code= ERR-CUST-01). Я также хочу передать имя вместо получения имени поля firstName. Например: @NotNull (метка = имя).   -  person Punter Vicky    schedule 28.08.2015
comment
Я хотел проверить, можно ли установить имя настраиваемого поля и значение кода ошибки с помощью некоторой аннотации и получить при возврате ошибки обратно потребителю.   -  person Punter Vicky    schedule 28.08.2015
comment
Вы ищете подход, основанный только на аннотациях?   -  person kolossus    schedule 28.08.2015
comment
Да, я предпочитаю аннотацию. Любой другой стандартный подход тоже поможет.   -  person Punter Vicky    schedule 28.08.2015


Ответы (2)


Для этого вам нужно создать свои собственные ограничения. Затем вы можете добавить дополнительные свойства, метку, errorCode и т. д., установить для них значения и использовать их. См.: http://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/validator-customconstraints.html#validator-customconstraints-compound

Затем вы можете определить свое сообщение об ошибке следующим образом: Error code: {errorCode} - {label} is mandatory

person Gokhan Oner    schedule 28.08.2015
comment
Пользовательское ограничение сможет обрабатывать любые необходимые настраиваемые свойства проверки, которые вы хотите. Кроме того, основываясь на упоминании их файла свойств, они могут захотеть изучить Интерполяция сообщения проверки для построения пользовательского сообщения. - person whitlaaa; 29.08.2015
comment
Что ж, это определенно мой выбор, я думаю, он использует ту же опору. для нескольких полей и хотите настроить его, например, добавить имена полей и т. д. - person Gokhan Oner; 30.08.2015

Самый простой подход (IMO) по-прежнему кажется большой работой для тривиальной (IMO) выгоды. Результат getFieldError предоставляется Validator. Зная это, вы можете предоставить собственный валидатор для вашего DataBinder. Ваш валидатор может выглядеть так:

  1. Сначала определите свой собственный валидатор

    public class FirstNameValidator implements Validator{
    
         public boolean supports(Class clazz) {
             return YourClass.class.equals(clazz);
         }
    
         public void validate(Object obj, Errors e) {
             if(obj != null){
                YourClass theObj = (YourClass)obj;
                   if(theObj.getFirstName() == null || theObj.getFirstName().trim()==""){
                      e.rejectValue("First Name","CUSTOMERROR-1000");
                   }
          }
    
       }
    

    }

  2. После чего вы теперь регистрируете свой собственный валидатор с помощью связывателя данных контекста (я предполагаю, что вы используете здесь Spring MVC):

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.addValidators(new FirstNameValidator());
    }
    

Это гарантирует, что вы получите имя в нужном формате. Опять же, требуется много печатать (подход, основанный на аннотациях, такой же длинный, с еще большим набором текста для поддержки аннотации) для небольшого количества причудливого текста.

person kolossus    schedule 31.08.2015