大佬教程收集整理的这篇文章主要介绍了Spring基于组的动态POJO验证,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如我所见,解决您的问题最简单的方法不是使用Spring或POJO,而是使用设计模式。
通过策略模式解决方案可以轻松解决您正在描述的问题。
您可以根据请求中期望的标头(用于描述用户类型)来匹配要使用的策略,然后在策略本身内部执行上述验证。
这将使您可以在整个方法中使用相同的POJO,并根据每种用户策略的类型来处理处理/解析和验证数据的细节。
这是Wiki书中的链接,其中包含对该模式的详细说明
策略模式
假设您有一个用于策略的基本界面:
interface Strategy {
Boolean valIDate(User user);
}
对于2种不同类型的用户,您有2种不同的实现:
public class StrategyA implements Strategy {
public Boolean valIDate(User user){
return user.getUsername().isEmpty();
}
}
public class StrategyB implements Strategy {
public Boolean valIDate(User user){
return user.getPhone().isEmpty();
}
}
您在您的User
POJO中添加了一个Strategy属性,并Strategy
在收到发布请求时为该属性分配正确的实现。
每当您需要为该用户验证数据时,您只需调用valIDate
分配策略的方法即可。
如果每种方法User
都适合多种策略,则可以添加一个List<Strategy>
作为属性,而不是一个。
如果您不想更改POJO,则每次收到帖子请求时都必须检查哪种策略是正确的。
除了valIDate
方法之外,您还可以添加方法来处理特定于每种策略的数据。
希望这可以帮助。
@H_489_0@解决方法public class User{
private String username;
private String firstName;
private String middlename;
private String lastName;
private String phone;
//getters and setters
}
我的应用程序基本上是基于Spring Boot的REST API,它公开了两个端点,一个端点@R_881_10589@,另一个端点检索用户。
“用户”落入某些类别, 基一 , B组 等。这是我从发布请求的报头中获得。
我需要在运行时中验证用户数据,并且验证可能因用户组而异。
例如,属于a组的用户可能会将电话号码作为可选字段,而对于其他某个组可能是必填字段。
正则表达式也可能根据其组而有所不同。
我需要能够配置spring,以便以某种方式动态验证我的pojo,一旦创建它们并根据其组触发了各自的验证集。
我希望不要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;
}
}
application.yml
not-null:
validators:
-
group: group-a
target: user.username
-
group: group-b
target: user.phone
我想将我的应用程序配置为以某种方式允许验证者选择其目标(实际对象, 而不是 yml中提到的字符串),并public void
validate(Object o)
在其目标上调用它们各自的对象。
聚苯乙烯
请随时编辑问题以使其变得更好。
我正在使用jackson对JSON进行序列化和反序列化。
以上是大佬教程为你收集整理的Spring基于组的动态POJO验证全部内容,希望文章能够帮你解决Spring基于组的动态POJO验证所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。