Весенняя проверка для списка вложенных классов

Я реализовал свою проверку списка пользовательских классов, как указано в этом сообщение. Для справки здесь мой код выглядит так

class TopDtoForm {
  @NotEmpty
  private String topVar;
  private List<DownDto> downVarList;
  //getter and setter
}

class DownDto {
  private Long id;
  private String name;
  //getter and setter
}

@Component
public class TopDtoFormValidator implements Validator {
  @Override
  public boolean supports(Class<?> clazz) {
    return TopDtoForm.class.equals(clazz);
  }

  @Override
  public void validate(Object target, Errors errors) {
    TopDtoForm topDtoForm = (TopDtoForm) target;
    for(int index=0; index<topDtoForm.getDownVarList().size(); index++) {
        DownDto downDto = topDtoForm.getDownVarList().get(index);
        if(downDto.getName().isEmpty()) {
            errors.rejectValue("downVarList[" + index + "].name", "name.empty");
        }
    }
  }
}

Таким образом, даже я отправляю пустой результат привязки имени с ошибкой 0. Я проверил с помощью topVar, и он отлично работает. Мой вопрос: нужно ли мне делать какие-либо другие настройки, чтобы использовать этот валидатор?

Спасибо


person αƞjiβ    schedule 16.09.2014    source источник
comment
Вы проверяете его в приложении Spring MVC с аннотацией @Valid? Если да, просто добавьте в TopDtoForm свой список @Valid и добавьте @NotEmpty к DownDto. Spring подтвердит это просто отлично   -  person kamil    schedule 16.09.2014
comment
@RequestMapping(value = /submitForm.htm, method = RequestMethod.POST) public @ResponseBody String saveForm(@Valid @ModelAttribute(topDtoForm) TopDtoForm topDtoForm, BindingResult result) {....}   -  person αƞjiβ    schedule 16.09.2014


Ответы (1)


В Spring MVC просто аннотируйте в TopDtoForm свой список с помощью @Valid и добавьте @NotEmpty к DownDto. Spring подтвердит это просто отлично:

class TopDtoForm {
  @NotEmpty
  private String topVar;
  @Valid
  private List<DownDto> downVarList;
  //getter and setter
}

class DownDto {
  private Long id;
   @NotEmpty
  private String name;
  //getter and setter
}

Затем в RequestMapping просто:

@RequestMapping(value = "/submitForm.htm", method = RequestMethod.POST) public @ResponseBody String saveForm(@Valid @ModelAttribute("topDtoForm") TopDtoForm topDtoForm, BindingResult result) {}

Также рассмотрите возможность переключения с @NotEmpty на @NotBlank, так как это также проверяет наличие белых символов (пробел, табуляция и т. д.).

person kamil    schedule 16.09.2014