我试图在我的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;
}
}
当我测试服务时,验证永远不会失败。我不知道我做错了。我正在测试服务的屏幕截图
答案 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>