【问题标题】:Do I need to validate entities if I have already validated the DTO?如果我已经验证了 DTO,是否需要验证实体?
【发布时间】:2020-09-25 06:13:12
【问题描述】:

我有点误会了。假设我有这样一个实体:

@Entity
public class Item {
    private String description;
}

以及该实体的 DTO:

public class ItemDto {
    private String description;
}

正如你已经了解的,所有控制器都只与 DTO 一起工作,即我从客户端部分获取 DTO,然后将其转换为实体,等等。所以,我决定验证 DTO:

 public class ItemDto {
      @Max(value = 100, message = "Description must not exceed 100 characters")
      private String description;
 }

验证效果很好,但我有一个问题:我是否也需要验证实体?我一直认为实体中用于验证的注释是没有用的,因为您仍然需要自己创建必要的表并设置必要的限制。但随之而来的问题是,实体是否应该与数据库中的表相对应?也就是说,例如,如果我在表中有一个字段的NOT NULL 约束,我是否也应该将@NotNull 注释放在实体中的该字段上? DTO 也不清楚。我正在验证 DTO,但这可能并不能保证完整的数据保护。换句话说,理论上,一些程序员可能会决定直接对实体做一些事情,但它没有得到验证。这一切都会导致错误。或者可能会出现这样的情况,在数据库中的表中设置了限制,而在实体中没有限制。也就是说,可以给实体赋值任意值,但是添加到数据库时出现错误。帮我处理一下情况。很抱歉,如果我没有很好地解释它。

【问题讨论】:

    标签: java validation spring-mvc jpa bean-validation


    【解决方案1】:

    你说

    实体是否应该与数据库中的表相对应?那 例如,如果我在表中有一个 NOT NULL 约束 字段,我是否也应该在该字段上添加 @NotNull 注释 实体?

    Bean Validation 的目的是用于验证 bean。因此,对于您不验证实体的情况,显然没有必要放置未使用的注释。


    你说

    我正在验证 DTO,但这可能不能保证完成。 数据保护

    JPA 注释用于此目的。比如你提到的NOT NULL场景,你可以使用@Column作为:

    @Column(nullable = false)
    

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多