我有一个基于 Jersey 的应用程序,我想向输入添加验证。
@POST
@Produces(APPLICATION_JSON) @Consumes(APPLICATION_JSON)
public SomeResponce myMethod(@Valid MyBean myBean)
问题是我的bean是由protostuff生成的,我无法添加验证注释。我找到了如何在没有注释/xml的情况下验证bean的方法: http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-programmatic-api
但是我对 Jersey 非常不熟悉,并且无法在文档中找到如何在不使用 bean 中的注释的情况下将此自定义 validator 添加到 Jersey。有什么办法可以做到吗?
Jersey 版本 - 2.8
最佳答案
一个简单的方法(也可以使用 Jersey )是 configure hibernate validator via XML 。将validation.xml文件放在META-INF文件夹中并创建constraint-mappings在引用的 xml 文件中:
src/main/resources/META-INF/validation.xml(validation.xml 必须位于类路径中的 META-INF 文件夹中):
<validation-config
xmlns="http://jboss.org/xml/ns/javax/validation/configuration" version="1.1">
<constraint-mapping>META-INF/mapping.xml</constraint-mapping>
</validation-config>
src/main/resources/META-INF/mapping.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.1.xsd"
xmlns="http://jboss.org/xml/ns/javax/validation/mapping" version="1.1">
<default-package>com.example</default-package>
<bean class="MyBean" ignore-annotations="true">
<field name="name">
<constraint annotation="javax.validation.constraints.Size">
<element name="max">5</element>
</constraint>
<constraint annotation="javax.validation.constraints.NotNull">
</constraint>
</field>
</bean>
</constraint-mappings>
src/main/java/com/example/MyBean.java:
package com.example;
public class MyBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
src/main/java/com/example/MyResource.java:
package com.example;
import javax.validation.Valid;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Path("/api")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class MyResource {
@POST
public String postIt(@Valid MyBean bean) {
return bean.getName();
}
}
关于java - 不带注释的 Jersey 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36496011/