Spring 4.2.3使用Hibernate验证器5.2.2.Final不起作用

时间:2015-11-25 20:55:28

标签: java spring hibernate maven spring-mvc

我正在尝试将Spring 4.2.3与hibernate验证器v.5.2.2.Final集成,以验证使用REST Controller公开的输入JSON数据。 我没有看到任何编译时间或运行时异常,但同时它不验证输入数据。

的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 class:

    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;
    }
}

2 个答案:

答案 0 :(得分:3)

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

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

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

实施JSR-349

OR

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

的所有依赖项

答案 1 :(得分:0)

我认为有兴趣看看这个link

如果要删除验证,只需从方法中移除@Valid即可。