我正在構建一個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