【问题标题】:Spring 4.2.3 with Hibernate validator 5.2.2.Final does not work带有 Hibernate 验证器 5.2.2.Final 的 Spring 4.2.3 不起作用
【发布时间】:2015-11-25 20:55:28
【问题描述】:

我正在尝试将 Spring 4.2.3 与休眠验证器 v.5.2.2.Final 集成以验证输入 JSON 数据是否与 REST 控制器一起公开。 我没有看到任何编译时或运行时异常,但同时它不验证输入数据。

Pom.xml

 <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.3.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    <!-- jsr303 validation dependencies -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.2.2.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>2.2.4</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.el</artifactId>
        <version>2.2.4</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-cdi</artifactId>
        <version>5.2.2.Final</version>
    </dependency>

Pojo java 类:

    public class RequestVO {    

    @NotEmpty
    private String testValidation;

    @NotNull
    private String testNull;

    @NotBlank
    private String testBlank;

   .... getters and setters .....
}

    @Controller
    @RequestMapping("/login")
    public class LoginController {

    @RequestMapping(method=RequestMethod.POST, value="/user")
    public @ResponseBody  ResponseVO getLoginResponse(@Valid @RequestBody RequestVO request, Errors error) {

            ResponseVO response = new ResponseVO ();


    if (error.hasErrors()) {
            System.err.println("Success");
        }

        return response;
    }
}

【问题讨论】:

  • 这段代码给你一些错误?放在这里。
  • 不,它没有。这是我的 json 请求 { "testNull":"" }
  • 它不验证请求。

标签: java spring hibernate maven spring-mvc


【解决方案1】:

在您的依赖项列表中有一条注释说 ...jsr303 验证依赖项...。请注意,bean 验证具有更新的规范 (JSR-349),这很可能是您的问题。

您应该按照以下方式对齐您的依赖项

hibernate-validator-5.x.x 
validation-api-1.1.x

实现JSR-349

hibernate-validator-4.x.x
validation-api-1.0.x.

实现JSR-303

如果混合依赖项,验证将根本无法启动。作为解决方案建议,添加

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

并确保删除对validation-api-1.0 jar 的任何依赖

【讨论】:

  • 我添加了 'org.hibernatehibernate-validator5.2.2.Finaljavax.validationvalidation-api1.1.0.Final' 它不起作用
  • 我尝试了两个版本。仍然无法进行验证。
  • 确保使用 @EnableWebMvc&lt;mvc:annotation-driven/&gt;,具体取决于您使用 java 还是 xml 配置
【解决方案2】:

我觉得有兴趣看看这个link

如果您要删除验证,只需从方法中删除 @Valid 就可以了。

【讨论】:

  • 我无法按照说明进行操作,请您详细说明一下吗?
猜你喜欢
  • 2020-07-29
  • 2016-03-07
  • 2016-09-12
  • 1970-01-01
  • 2016-12-06
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
相关资源
最近更新 更多