使用Spring Boot 1.4和Spring Data Rest / MVC我无法让@Valid @RequestBody正常工作。我已经尝试了多个版本的Hibernate Validator,声明了Validtor bean等等。没有运气。
@BasePathAwareController
@RestController
public class TestRestController extends BaseController {
@PostMapping("/pojo/save")
public @ResponseBody ResponseEntity<?> upload(@Valid @RequestBody MyPojo pojo) {
// Code here calling a repository.save.
}
MyPojo包含各种验证注释,即@ Digits,@ NotNull等。当调用repostiory.save方法但Spring没有尝试对pojo进行任何验证时,我实际上看到了验证器异常。
以下是我的POM部分,包括spring依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
任何想法都将不胜感激。我做了大量的搜索,尝试了许多不同的配置而没有任何运气。
更新
尝试将实体保存到数据库时,发生验证错误时。我收到以下错误:
Caused by: javax.persistence.RollbackException: Error while committing the transaction
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='numeric value out of bounds (<9 digits>.<3 digits> expected)...
答案 0 :(得分:0)
使用@Valid注释,您应该在验证pojo之后立即声明BindingResult参数。 BindingResult将包含所有验证错误,您可以随心所欲地执行任何操作。
答案 1 :(得分:0)
事实证明@BasePathAwareController是导致绑定验证无法运行的原因。不确定这是预期的行为还是错误,但是通过从我的控制器中删除该注释,验证将按预期运行。