【问题标题】:400 Bad request with Hibernate @ValidHibernate @Valid 的 400 错误请求
【发布时间】:2014-04-21 17:52:03
【问题描述】:

我在验证表单时有一个奇怪的行为。

只要我添加了 Hibernate @Valid 注释,如果发布的数据无效,Tomcat 就会认为我的请求是“坏的”。如果数据是有效的,不用担心。

我用:

  • Tomcat 7.0.52
  • Javax 验证 api 1.1.0.Final
  • 休眠验证器 5.1.0.Final
  • Spring 4.0.3.RELEASE

目前,我做了一个非常简单的验证:

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 注释时,也不用担心。

有人有想法吗?

非常感谢您的帮助! :-)

【问题讨论】:

    标签: spring hibernate validation tomcat hibernate-validator


    【解决方案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;
    }
    

    【讨论】:

    • 太棒了!!有用!!只是因为缺少一个论点(最后是一个重要的论点……;-))。非常感谢geoand! :-)
    • @Didasko 没问题!如果不是太麻烦,请接受正确的答案(或其他可以帮助您解决问题的答案),以便将来的用户无需阅读 cmets 就知道它是正确的。
    • @Didasko 好的!太棒了:)
    • @Didasko BindingResult 如何帮助防止 400 bad request 错误?
    • @Vish - 嗨! BindingResult 帮助我防止了错误请求,因为当 Spring 使用 JSR-303 提供程序进行验证时(任何时候遇到 @Valid),Spring 需要一些东西来暴露潜在的错误。 Spring 的这个“东西”是一个BindingResult 对象。我的方法的参数中缺少这个 BindingResult 对象。 => Spring Validation Documentation
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多