使用 JAX-RS 和 DTO 参数的 Bean 验证
Bean Validation using JAX-RS and DTO parameters
我正在尝试在我的 JAX-RS 服务上使用 Bean 验证。但是我无法使用 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;
}
}
这是我的带有 Bean 验证注释的 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
注释您的方法(或 class),它来自:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-hibernatevalidator-provider</artifactId>
<version>2.3.1.GA</version>
</dependency>
我正在尝试在我的 JAX-RS 服务上使用 Bean 验证。但是我无法使用 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;
}
}
这是我的带有 Bean 验证注释的 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
注释您的方法(或 class),它来自:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-hibernatevalidator-provider</artifactId>
<version>2.3.1.GA</version>
</dependency>