【发布时间】:2017-01-27 20:02:47
【问题描述】:
使用 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)...
【问题讨论】:
-
如果您在前端使用 Spring 表单,请将
@RequestBody更改为@ModelAttribute...如果可能,请显示前端代码(您如何调用此请求) -
这是一个 REST 端点,所以我只是使用 Postman 客户端在正文中使用 JSON 对象进行 POST。
-
我之前找到了这两个链接并尝试了这些解决方案。我还尝试了不同版本的休眠验证器和验证 api 库,但均无济于事。 Spring 拒绝验证请求正文。
标签: spring hibernate validation spring-boot