我正在尝试在我的 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;
}
}
当我测试服务时,验证永远不会失败。我不知道我做错了。有一个屏幕截图是我正在测试该服务
最佳答案
您需要将@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/