【问题标题】:Auto validation using hibernate validator XML configuration and Spring使用休眠验证器 XML 配置和 Spring 进行自动验证
【发布时间】:2016-03-20 21:19:59
【问题描述】:

我已经使用 Spring-MVC 创建了 RESTful 服务 (POST),并且可以使用 POSTMAN 成功访问它。 现在,我正在尝试对输入 json 进行验证,并且我想通过其 XML 配置来使用 Hibernate 验证器。但是验证没有触发。

这是我的服务签名,如下所示:

@RequestMapping(value = "/checkmycar", method = RequestMethod.POST, consumes = "application/json")
public String check(@Valid @RequestBody Car car, BindingResult result) {

    if (result.hasErrors()) {
        return "ERROR";
    }

    else
        return car.getManufacturer();
}

以下是我的 POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test.hibernate-validator</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.2.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.10</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.2.0.Final</version>
    </dependency>

</dependencies>

我指的是this 文档。并创建了验证 xml

<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
                 xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
<default-package>org.hibernate.validator.quickstart</default-package>
<bean class="Car" ignore-annotations="true">
    <field name="manufacturer">
        <constraint annotation="javax.validation.constraints.NotNull"/>
    </field>
</bean>

约束测试.xml

<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
                 xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
<default-package>org.hibernate.validator.quickstart</default-package>
<bean class="Car" ignore-annotations="true">
    <field name="manufacturer">
        <constraint annotation="javax.validation.constraints.NotNull"/>
    </field>
</bean>

我已经在 src/main/resources 中放置了 constraints-test.xml 和 validation.xml。

汽车.java

public class Car {

private String manufacturer;

public Car() {
}

public Car(String manufacturer) {
    this.manufacturer = manufacturer;
}
public String getManufacturer() {
    return manufacturer;
}

public void setManufacturer(String manufacturer) {
    this.manufacturer = manufacturer;
}
}

现在当我使用以下 json 触发服务时

{
"manufacturer":"TOYOTA"
}

我得到 {"TOYOTA"}

当我发送无效的 json 时

{ “制造商”:空 }

我得到 {null}

谁能告诉我为什么没有触发休眠验证?

提前致谢

【问题讨论】:

    标签: spring spring-mvc hibernate-validator


    【解决方案1】:

    我已经在 src/main/resources 中放置了 constraints-test.xml 和 validation.xml。

    validation.xml 需要住在META-INF,即应该是src/main/resources/META-INF

    顺便说一句。仍然使用 HV 4.2 的原因?它现在真的很老了,如果可能的话,我建议你升级到 5.2.2 或 4.3.2(以防你需要继续使用 Bean Validation 1.0)。

    【讨论】:

    • 感谢您的回复@Gunnar。我们仍在使用 Spring 3.2.0.RELEASE,根据我的理解,它不支持 HV 4.3.2 ..我的理解正确吗?无论如何,在发布问题之前,我曾尝试将validation.xml 放在src\main\webapp\META-INF 中,构建后它可以在.war/META-INF/ 中使用。让我试着把它放在 /resources/META-INF 中。
    • 出于项目特定原因,我们仍在使用 Spring 3.2.0.RELEASE,据我了解,它不支持 HV 4.3.2/5.2.2 ..我的理解是否正确?我在哪里可以获得这些兼容性信息?
    • 当我将validation.xml 放入src/main/resources/META-INF 时,它运行良好。现在正在触发验证。非常感谢您的提示!
    猜你喜欢
    • 2023-03-21
    • 2011-11-17
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多