【问题标题】:Spring form validation for plain HTML form纯 HTML 表单的 Spring 表单验证
【发布时间】:2014-08-10 21:53:22
【问题描述】:

我需要在我的应用程序中验证一些简单的表单。在这些表单中,我有一个或两个要验证的输入文本,因此我不想为每个表单创建一个特定的 ModelAttribute 类。我想改用纯 HTML 表单并使用 @RequestParam 注释来处理 POST 参数。

有没有办法在这种情况下使用 Spring 表单验证(不使用模型属性)或者我应该为每个表单实现一个支持表单对象和一个验证器?

【问题讨论】:

    标签: java spring validation spring-mvc


    【解决方案1】:

    您可以实例化一个模型对象,用普通表单中的数据填充它并以编程方式验证该对象。

    【讨论】:

      【解决方案2】:

      目前无法在个人@RequestParam@PathVariable 等上使用@Valid 来触发验证。 This 是 Spring 问题跟踪器上的相关功能请求。让我们为 Spring 4.1 祈祷吧!

      在您的情况下,您要么必须使用@ModelAttribute,要么在控制器内部执行自定义验证(或者如果您希望将相同的验证应用于多个端点,则可以使用 Spring 拦截器)

      【讨论】:

      • 是否可以将Map 用作ModelAttribute
      • 您可以使用 Map<String,String> 强制 Spring MVC 为您提供所有参数,但我严重怀疑是否会在其上运行验证
      【解决方案3】:

      没有模型属性,Spring 表单验证是不可能的。因为 Spring Form Validation 依赖于 Spring Form Binding,它是表单元素和 Model Attribute 之间的链接。那么表单可能有多小,创建一个 DTO(模型属性),将其绑定到表单并执行验证。

      【讨论】:

        【解决方案4】:

        绝对不可能使用 Spring 的验证 API(错误对象):

        java.lang.IllegalStateException: An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply
        

        【讨论】:

          【解决方案5】:

          我认为您可以使用 Annotation 来做到这一点。您可以为您的参数指定注释:

          • @Size(min=3, max=5)
          • @NotNull
          • @NotEmpty

          ...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-06-27
            • 2020-12-22
            • 2013-03-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-02-17
            • 2011-08-23
            相关资源
            最近更新 更多