400 Плохой запрос с Hibernate @Valid

У меня странное поведение при проверке формы.

Как только я добавляю аннотацию Hibernate @Valid, Tomcat посчитал мой запрос "плохим", если опубликованные данные недействительны. Если данные верны, не беспокойтесь.

Я использую:

  • Tomcat 7.0.52
  • API проверки Javax 1.1.0.Final
  • Hibernate Validator 5.1.0.Финал
  • Весна 4.0.3.РЕЛИЗ

На данный момент я провожу очень простую проверку:

public class RemoveCacheElementForm {

    @NotBlank(message = "Please select a cache name.")
    private String name;

    @NotBlank(message = "Please select a cache entry key.")
    private String key;

Контроллер Spring:

/**
 * Handler to remove one cached elements from the specified cache.
 * 
 * @return the view.
 */
@RequestMapping(value = CACHE_REMOVE, method = RequestMethod.POST)
public String removeCachedElement(ModelMap model, @Valid @ModelAttribute(FORM_NAME) RemoveCacheElementForm form) {
    model.addAttribute("removeElementResult", CacheUtils.removeCachedElement(form.getName(), form.getKey()));
    initializeModel(model);
    return CACHE_ADMIN_PAGE;
}

Когда я удаляю аннотацию @Valid, тоже не о чем беспокоиться.

У кого-нибудь есть идея?

Спасибо большое за вашу помощь! :-)


person Didasko    schedule 21.04.2014    source источник


Ответы (1)


Попробуйте изменить свой код на

@RequestMapping(value = CACHE_REMOVE, method = RequestMethod.POST)
public String removeCachedElement(ModelMap model, @Valid @ModelAttribute(FORM_NAME) RemoveCacheElementForm form, BindingResult bindingResult) {
    model.addAttribute("removeElementResult", CacheUtils.removeCachedElement(form.getName(), form.getKey()));
    initializeModel(model);
    return CACHE_ADMIN_PAGE;
}
person geoand    schedule 21.04.2014
comment
Большой!! Оно работает!! Просто потому, что отсутствует аргумент (и, наконец, важный аргумент ... ;-)). Большое спасибо geoand! :-) - person Didasko; 21.04.2014
comment
@Didasko Нет проблем! Если это не слишком большая проблема, пожалуйста, примите ответ (или какой-либо другой, который поможет вам с вашей проблемой) как правильный, чтобы пользователи в будущем знали, что он правильный, не читая комментариев. - person geoand; 21.04.2014
comment
@ Дидаско Хорошо! Большой :) - person geoand; 21.04.2014
comment
@Didasko, как BindingResult помог предотвратить ошибку 400 неверных запросов? - person Vish; 20.03.2016
comment
@Vish - Привет! BindingResult помог мне предотвратить неверный запрос просто потому, что когда Spring проверяет провайдер JSR-303 (в любое время встречается @Valid), Spring нужно что-то, чтобы выявить потенциальные ошибки. Это что-то для Spring - это BindingResult объект. И этот BindingResult объект отсутствовал в аргументах моего метода. = ›Документация по проверке Spring - person Didasko; 22.03.2016