java – Spring JSR 303验证在编辑/添加时访问其他字段值

我有一个要求,其中我想使用Bean进行更新/添加.现在我有一个验证,因为名称应该是唯一的.

现在在添加期间,验证部分正常工作,因为它通过查询DB来检查唯一值.

现在,当我想更新同一条记录时,它正在尝试检查数据库中的唯一约束并因记录已存在而失败.

角色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字段时,将验证角色名称,并在DB中存在相同的角色名称时抛出验证错误.有没有办法,我可以从屏幕上将其他变量发送到我的自定义验证器,说明以下是更新屏幕,所以只有当它从以前的值更改时才验证该字段?

最佳答案 我通过在getter方法上进行注释来解决这个问题,其中所有必需的字段都通过该方法作为单个映射返回,并且在validationIMPL中我检索了所有必需的信息并进行相应的处理.

 private String roleName;

 @UniqueValue(query = AppConstants.UNIQUE_VALIDATION_DB_QUERY)
 public Map<String,String> getUniqueValidator(){
   Map<String,String> validatorMap=new HashMap<String,String>();

   validatorMap.put("ACTION",type of action(update/new)):
   validatorMap.put("VALUE",this.roleName):
   return validatorMap;
 }

 public String getRoleName() {
        return roleName;
 }

 public void setRoleName(String roleName) {
        this.roleName = roleName;
 }
点赞