基于春季组的动态 POJO 验证
请考虑以下 pojo 作为参考:
public class User{
private String username;
private String firstName;
private String middleName;
private String lastName;
private String phone;
//getters and setters
}
我的应用程序基本上是一个基于弹簧引导的REST API,它公开了两个端点,一个用于创建用户,另一个用于检索用户。
“用户”属于某些类别,组-a,组-b等,我从帖子请求的标题中获得。
我需要在运行时验证用户数据,并且验证可能因用户组而异。
例如,属于组 a 的用户可能将电话号码作为可选字段,而它可能是其他组的必填字段。
正则表达式也可能根据其组而有所不同。
我需要能够配置spring,以便在创建它们后立即以某种方式动态验证我的pojo,并且它们各自的验证集会根据它们的组触发。
也许我可以创建一个yml / xml配置,允许我启用此功能?
我宁愿不注释我的 with 和 .private String phone
@NotNull
@Pattern
我的配置如下:
public class NotNullValidator implements Validator {
private String group;
private Object target;
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
@Override
public void validate(Object o) {
if (Objects.nonNull(o)) {
throw new RuntimeException("Target is null");
}
}
}
public interface Validator {
void validate(Object o);
}
@ConfigurationProperties(prefix = "not-null")
@Component
public class NotNullValidators {
List<NotNullValidator> validators;
public List<NotNullValidator> getValidators() {
return validators;
}
public void setValidators(List<NotNullValidator> validators) {
this.validators = validators;
}
}
应用程序.yml
not-null:
validators:
-
group: group-a
target: user.username
-
group: group-b
target: user.phone
我想将我的应用程序配置为以某种方式允许验证程序选择它们的目标(实际对象,而不是yml中提到的字符串),并在它们的目标上调用它们各自的目标。public void validate(Object o)
附言
请随时编辑问题以使其更好。
我正在使用jackson进行序列化和反序列化JSON。