java - 使用 JAX-RS 和 DTO 参数进行 Bean 验证

标签 java rest jax-rs bean-validation wildfly-10

我正在尝试在我的 JAX-RS 服务上使用 Bean 验证。但我无法使用 JSON 对象而不是简单参数来使其与验证一起使用。

我有这个 REST 接口(interface):

@Path("persons")
@Produces(MediaType.APPLICATION_JSON)
public class PersonRestService {

    @EJB
    private GreeterEJBLocal greeterEJB;

    @POST
    @Path("greet")
    @Consumes(MediaType.APPLICATION_JSON)
    public SayHelloRestResponse sayHello(SayHelloRestRequest sayHelloRestRequest) {
        SayHelloRestResponse sayHelloRestResponse = new SayHelloRestResponse();
        Person person = new Person();
        person.setName(sayHelloRestRequest.person.name);
        person.setEmail(sayHelloRestRequest.person.email);

        SayHelloRequest sayHelloRequest = new SayHelloRequest();
        sayHelloRequest.setPerson(person);

        SayHelloResponse sayHelloResponse = greeterEJB.sayHello(sayHelloRestRequest.person.name, sayHelloRestRequest.person.email);

        sayHelloRestResponse.setMessage(sayHelloResponse.getMessage());

        return sayHelloRestResponse;
    }
}

这是我的带有 Bean Validation 注释的 DTO:

public class SayHelloRestRequest implements Serializable {

    // Default serial version UID
    private static final long serialVersionUID = 1L;

    public Person person;

    public static class Person {
        @Size(min = 2, max = 5, message = "{person.name.size}")
        public String name;
        @Email(message = "{person.email.email}")
        public String email;
    }

}

当我测试服务时,验证永远不会失败。我不知道我做错了。有一个屏幕截图是我正在测试该服务

enter image description here

最佳答案

您需要将@Valid添加到您的方法签名中:

SayHelloRestResponse sayHello(@Valid SayHelloRestRequest sayHelloRestRequest) {

@Valid 注释可确保您的 DTO 在运行时得到验证。

如果您使用 RESTEasy,则需要使用来自以下位置的 @ValidateRequest 注释您的方法(或类):

<dependency>
   <groupId>org.jboss.resteasy</groupId>
   <artifactId>resteasy-hibernatevalidator-provider</artifactId>
   <version>2.3.1.GA</version>
</dependency>

关于java - 使用 JAX-RS 和 DTO 参数进行 Bean 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39582633/

相关文章:

java - 适用于 Android 应用程序的 REST API

rest - Azure Analysis Services 通过 REST API 横向扩展

java - 在 Java Jersey 2 JAX-RS 中初始化单例

java - 我在部署适配器时收到内容缺失错误 "JAXRSApplicationClass"?

java - 如何在 Elasticsearch 中索引 pdf 文档内容?

java - Oracle getConnection 慢

java - Java导入Minecraft Mod的build.gradle文件

java - 使用 StandardCharset 的 PrintWriter

Spring boot - Embedded Tomcat - Connector Customizer - 无法添加 parseBodyMethods 属性

java - Apache FELIX JAX-RS 更改上下文路径