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

时间:2016-09-19 21:46:32

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

我试图在我的JAX-RS服务上使用Bean Validations。但我无法使用JSON对象而不是简单参数来验证它。

我有这个REST界面:

@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;
    }
}

这是我的DTO with Bean Validation annotations:

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

1 个答案:

答案 0 :(得分:1)

您需要在方法签名中添加@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>