【发布时间】:2022-01-16 04:56:40
【问题描述】:
我想从 dto 对象中设置值并使用 save jpa 存储库方法将它们插入数据库中,如果属性无效(null 或大小更长),我可以使用 jpa 插入默认值吗?
dto 对象:
public class SocleList implements Serializable {
private static final long serialVersionUID = -5008625218377596565L;
@JsonProperty("records")
@Valid
private List<Socle> SocleList;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Socle implements Serializable {
private static final long serialVersionUID = -1864310486952111265L;
@NotNull
public int iDTechn;
@NotNull
@Max(value = 99999)
private Integer code;
@NotNull
private String codeType;
@NotNull
@Size(min = 1, max = 2)
private String red;
private @NotNull
@Max(value = 99999)
Integer FPrinci;
private @NotNull
@Max(value = 99999)
Integer surface;
@NotNull
@Size(min = 1, max = 2)
private String Xnseigne;
}
我使用验证器来控制值:
public static int validate(SocleList SocleList,
Validator validator) {
Set<ConstraintViolation<SocleList>> violations;
violations = validator.validate(socleList);
log.info("Nombre de violations : {}", violations.size());
for (ConstraintViolation<SocleList> constraintViolation : violations) {
log.info("Valeur '{}' incorrecte pour '{}' : '{}' "
, constraintViolation.getInvalidValue()
, constraintViolation.getPropertyPath()
, constraintViolation.getMessage());
}
return violations.size();
}
【问题讨论】:
-
如果输入无效,你打算如何抛出异常?
-
最好让数据库处理默认值,以便在创建表时使该列具有默认值,并且根据您的验证,您不提供它的值
-
@Sreyas 如果 violation.size() 大于 0 我不插入数据库
-
@justsomeone 我在创建表时在数据库中指定了一个默认值,但是如何忽略无效属性并插入默认值?
标签: java spring-boot validation jpa hibernate-validator