使用休眠验证器 XML 配置和 Spring 自动验证
Auto validation using hibernate validator XML configuration and Spring
我已经使用 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>
约束-test.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.
中放置了两个约束 - test.xml 和 validation.xml
Car.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
{
"manufacturer":空
}
我得到 {null}
有人可以告诉我为什么没有触发休眠验证吗?
提前致谢
I have placed both constraints-test.xml and validation.xml in src/main/resources.
validation.xml
需要住在 META-INF
,即应该是 src/main/resources/META-INF
.
有没有顺便说一句。仍然使用 HV 4.2 的原因?它现在真的很旧,我建议您尽可能升级到 5.2.2 或 4.3.2(以防您需要继续使用 Bean Validation 1.0)。
我已经使用 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>
约束-test.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.
中放置了两个约束 - test.xml 和 validation.xmlCar.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
{ "manufacturer":空 }
我得到 {null}
有人可以告诉我为什么没有触发休眠验证吗?
提前致谢
I have placed both constraints-test.xml and validation.xml in src/main/resources.
validation.xml
需要住在 META-INF
,即应该是 src/main/resources/META-INF
.
有没有顺便说一句。仍然使用 HV 4.2 的原因?它现在真的很旧,我建议您尽可能升级到 5.2.2 或 4.3.2(以防您需要继续使用 Bean Validation 1.0)。