Spring Boot Hibernate 约束验证器

Posted

技术标签:

【中文标题】Spring Boot Hibernate 约束验证器【英文标题】:Spring Boot Hibernate Constraint Validator 【发布时间】:2017-04-14 17:07:48 【问题描述】:

我想通过使用 Spring Boot 和 Hibernate Validator 进行字段验证而不持久化数据。

public class RoomDto 

    private long id;

    @Expose
    private int beds;

    @Expose
    private double size;

    @Expose
    @NotNull
    private String flatBasicStringDto;

我正在使用 GSON 从 JSON 解析 DTO:

RoomDto guestRoom = this.jsonParser.read(RoomDto.class, "/files/input/room.json");

当 JSON 文件中缺少 flatBasicStringDto 时,我想得到一个错误。

我已经尝试了很多配置,但到目前为止没有任何效果。

spring.jpa.properties.javax.persistence.validation.group.pre-persist=javax.validation.groups.Default

任何想法如何处理这个问题?

【问题讨论】:

【参考方案1】:

您可以使用@valid 注解来使用方法级别的验证。但是,您需要 DI 容器与验证框架挂钩。使用 Spring 的综合示例位于 http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/。

如果您不想使用 DI 容器,可以使用类似这样的方法来获取验证错误:

 ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
 Validator validator = factory.getValidator();
 Set<ConstraintViolation<RoomDto>> errors = validator.validate(guestRoom);

【讨论】:

出色的答案!这两个建议都很好。看来我一直在使用错误的方法。谢谢!

以上是关于Spring Boot Hibernate 约束验证器的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot org.hibernate.exception.ConstraintViolationException

Spring-boot & hibernate,使用事务

Spring Data JPA和Hibernate:数据库约束的异常处理

spring boot 集成 jpa+hibernate+jdbcTemplate

Spring boot/Hibernate 创建表失败

Spring Boot JPA Hibernate - 以毫秒精度存储日期