java - 不带注释的 Jersey 验证

标签 java validation jersey protostuff

我有一个基于 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/

相关文章:

java - 如何在 catch block 中打印变量?

java - 2014 年实现 Java REST Web 服务的最简单框架

java - Jersey 2.22 : When should I close the Client instance?

java - Web 服务 java JAX-RS 中的多个参数

java - RMI 客户端无法查找服务器 - java.rmi.UnmarshalException

java - 自定义 ListPreference 中的选定项目未更改

java - JVM 的 lsof 对应物?

域建模中的验证错误,Grails

jquery - Parsley 用于验证并通过 ajax 提交数据

regex - 使用正则表达式验证 ASP Classic 中的表单和查询字符串。几乎可以工作但缺少一些东西?