我正在构建一个REST API。它由一个资源(@Controller)组成,该资源即使在其中一个必填字段不存在时也会返回响应204。Spring 3 - 基于注释的Bean验证
我正在使用Spring 3.1,validation-api(1.1.0.Final)& Hibernate-validator(4.3.0)。不确定Hibernate验证器在这里扮演什么角色。
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.0.Final</version>
<exclusions>
<exclusion>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
我有一个春天控制器@Controller和豆与@Component
@POST
@Consumes(value = {MediaType.APPLICATION_JSON})
@Produces(value = {MediaType.APPLICATION_JSON})
@RequestMapping(method = RequestMethod.POST)
public Response addUserData(@Valid @RequestBody UserData userDataRequest) throws ResourceException {
...
}
我的UserData bean有
@Component
public class UserData {
@NotNull(message = "user ID should not be null")
@Min(value = 1, message = "user ID should not be empty")
@Max(value = 20, message = "user ID should have length of more than 20")
@Pattern(regexp="[A-Z][a-z]+", message = "Only Alphanumeric characters allowed")
private String userId;
}
我的验证没有得到执行。当我不传递“userId”时,不会抛出任何错误。我在这里错过了什么?
我会尽力的,但我不认为这就是问题,因为状态出来为204 @Valid应该认识到,用户id为空,然后回来用400更新的问题是相同的。顺便说一句,我已经使用了你粘贴到目前为止的确切链接。 – greengrassbluesky
更新 - 当我添加BindingResult(即使我没有MVC类型的实现)时,我得到以下错误SEVERE:StandardWrapper.Throwable org.glassfish.jersey.server.model.ModelValidationException:应用程序资源模型的验证失败应用初始化。 [[致命]没有为public javax.ws.rs.core.Response类型的参数添加注入源add(UserData,BindingResult) – greengrassbluesky