проверка запрещенных полей - PullRequest
4 голосов
/ 24 октября 2010

Я новичок в весенних рамках. В настоящее время я создаю новость форму менеджера.

Вот образец моей новостной сущности:

class News
{
    @NotNull
    long id;
    @NotNull
    long idAuthor;
    @Size(max=255)
    String content;
}

Как видите, я использую проверку аннотаций JSR303 в Spring. Я хочу подтвердить свою «форму редактирования новостей».

@RequestMapping( value = "/edit" , method = RequestMethod.POST)
    public String editAction(@Valid @ModelAttribute News news, BindingResult result)
    {   
        System.err.println(result.hasErrors());
          ...
            return "editView";
    }

Определить допустимое поле:

//initBinder function :
     binder.setAllowedFields("content");

Что ж, я пытаюсь проверить только поле "содержимое" (допустимое поле установлено в моем связывателе) ... Но Spring всегда проверяет все поля, определенные в моей сущности (поэтому "id" и "idAuthor" возвращают ошибку)

Как я могу проверить только допустимое поле (установлено в функции initBinder)?

1 Ответ

4 голосов
/ 24 октября 2010

Нет хороших способов сделать это.

JSR-303 предлагает два подхода для выборочной проверки:

  • Вы можете проверить определенные свойства, вызвав validator.validateProperty(news, "content")
  • Вы можете определить группы проверки:

    @Size(max=255, groups = {Default.class, WebValidation.class})      
    String content; 
    

    и проверить указанную группу: validator.validate(news, WebValidation.class);

Ни один из этих подходов не поддерживается напрямуюВесна MVC.Вы можете автоматически подключить JSR-303 Validator и вызывать эти методы вручную, но они возвращают Set<ConstraintViolation<?>>, и код для помещения этих ConstraintViolation в BindingResult скрыт глубоко внутри внутренних компонентов Spring и не может быть легкоиспользуется повторно (см. SpringValidatorAdapter).

Существует запрос на поддержку групп проверки в подходе @Valid ( SPR-6373 ) с версией исправления3.1.

Таким образом, кроме создания специального класса DTO, у вас не так много вариантов: вы можете использовать ручную проверку (без JSR-303) или скопировать и вставить код из SpringValidatorAdapterв свой собственный служебный метод и вручную вызовите методы JSR-303 Validator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...