如果我已经验证了 DTO,还需要验证实体吗?
Do I need to validate entities if I have already validated the DTO?
我有点误会。假设我有这样一个实体:
@Entity
public class Item {
private String description;
}
以及此实体的 DTO:
public class ItemDto {
private String description;
}
你已经明白了,所有的controller只和DTO一起工作,也就是说,我从client部分获取DTO,然后将其转化为实体,所以on.So,我决定验证一下DTO:
public class ItemDto {
@Max(value = 100, message = "Description must not exceed 100 characters")
private String description;
}
验证工作正常,但我有一个问题:我是否也需要验证实体?我一直认为实体中用于验证的注释是无用的,因为您仍然自己创建必要的 table 并设置必要的限制。但是随之而来的问题是,实体到底应该对应数据库中的table吗?也就是说,例如,如果我在一个字段的 table 中有一个 NOT NULL
约束,我是否也应该在实体中的这个字段上放置 @NotNull
注释? DTO也不清楚。我正在验证 DTO,但这可能不能保证完整的数据 protection.in 换句话说,理论上,某些程序员可能决定直接对实体执行某些操作,但它未经过验证。所有这些都会导致错误。或者可能会出现数据库中table中设置了限制,而entity.in中没有限制的情况,也就是说,你可以给实体赋任意值,但是当将其添加到数据库中。帮我处理一下情况。如果我没有解释清楚,请见谅。
你说
Should entities correspond to the table in the database at all? That
is, for example, if I have a NOT NULL
constraint in the table for a
field, should I also put the @NotNull
annotation over this field in
the entity?
Bean Validation的目的是用来验证bean。因此,对于您不验证实体的情况,放置未使用的注释显然没有意义。
你说
I'm validating the DTO, but this probably doesn't guarantee complete.
data protection
JPA
annotations serve this purpose. For example, in the NOT NULL
scenario you mentioned, you can use @Column
为:
@Column(nullable = false)
我有点误会。假设我有这样一个实体:
@Entity
public class Item {
private String description;
}
以及此实体的 DTO:
public class ItemDto {
private String description;
}
你已经明白了,所有的controller只和DTO一起工作,也就是说,我从client部分获取DTO,然后将其转化为实体,所以on.So,我决定验证一下DTO:
public class ItemDto {
@Max(value = 100, message = "Description must not exceed 100 characters")
private String description;
}
验证工作正常,但我有一个问题:我是否也需要验证实体?我一直认为实体中用于验证的注释是无用的,因为您仍然自己创建必要的 table 并设置必要的限制。但是随之而来的问题是,实体到底应该对应数据库中的table吗?也就是说,例如,如果我在一个字段的 table 中有一个 NOT NULL
约束,我是否也应该在实体中的这个字段上放置 @NotNull
注释? DTO也不清楚。我正在验证 DTO,但这可能不能保证完整的数据 protection.in 换句话说,理论上,某些程序员可能决定直接对实体执行某些操作,但它未经过验证。所有这些都会导致错误。或者可能会出现数据库中table中设置了限制,而entity.in中没有限制的情况,也就是说,你可以给实体赋任意值,但是当将其添加到数据库中。帮我处理一下情况。如果我没有解释清楚,请见谅。
你说
Should entities correspond to the table in the database at all? That is, for example, if I have a
NOT NULL
constraint in the table for a field, should I also put the@NotNull
annotation over this field in the entity?
Bean Validation的目的是用来验证bean。因此,对于您不验证实体的情况,放置未使用的注释显然没有意义。
你说
I'm validating the DTO, but this probably doesn't guarantee complete. data protection
JPA
annotations serve this purpose. For example, in the NOT NULL
scenario you mentioned, you can use @Column
为:
@Column(nullable = false)