【发布时间】:2016-10-14 05:07:16
【问题描述】:
我有一个要求,我想使用 Bean 进行更新/添加。现在我有一个验证,因为名称应该是唯一的。
现在在添加过程中,验证部分可以正常工作,因为它正在通过查询数据库检查唯一值。
现在,当我想更新同一条记录时,它正在尝试检查数据库中的唯一约束,但由于记录已经存在而失败。
角色豆
public class Role {
@NotEmpty
@Pattern(regexp = "[a-zA-Z ]*")
@UniqueValue(query = AppConstants.UNIQUE_VALIDATION_DB_QUERY)
private String roleName;
private String roleDesc;
private boolean active;
private String maskRoleName;
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleDesc() {
return roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}
我的自定义注释验证器
public class UniqueValueValidator implements ConstraintValidator<UniqueValue, String> {
@Autowired
private ValidationDAO validationDAO;
private String query;
public void initialize(UniqueValue uniqueValue) {
this.query = uniqueValue.query();
}
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
if (!StringUtils.isEmpty(value) && !StringUtils.isEmpty(query)) {
return validationDAO.isValidUniqueField(query, value);
}
return true;
}
}
现在,当我仅从屏幕更新 RoleDesc 字段时,角色名称将被验证并引发验证错误,因为数据库中存在相同的角色名称。有没有一种方法可以让我从屏幕向我的自定义验证器发送其他变量,说以下是更新屏幕,所以只有在字段从之前的值更改时才验证该字段?
【问题讨论】:
标签: java validation spring-mvc