- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
考虑以下 pojo 以供引用:
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,它公开了两个端点,一个用于创建用户,另一个用于检索用户。
“用户”属于某些类别,group-a、group-b 等,我从帖子请求的 header 中获得。
我需要在运行时验证用户数据,验证可能因用户组而异。
例如,属于 group-a 的用户可能将电话号码作为可选字段,而对于其他组可能是必填字段。
正则表达式也可能因组而异。
我需要能够配置 spring,以某种方式在创建 pojo 后立即动态验证我的 pojo,并根据它们的组触发它们各自的验证集。
也许我可以创建一个 yml/xml 配置来启用它?
我不想用 @NotNull
和 @Pattern
注释我的 private String phone
。
我的配置如下:
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
我想配置我的应用程序以某种方式允许 validator 选择它们的目标(实际对象,不是 yml 中提到的字符串),并调用它们各自的 public void validate(对象 o)
在他们的目标上。
附言
请随时编辑问题以使其更好。
我正在使用 jackson 对 JSON 进行序列化和反序列化。
最佳答案
在我看来,解决问题的最简单方法不是使用 Spring 或 POJO 本身,而是使用设计模式。
您所描述的问题很容易通过策略模式解决方案解决。
您将策略与您期望在请求中使用的 header 匹配,该 header 描述了用户的类型,然后您在策略本身内部执行所述验证。
这将允许您对整个方法使用相同的 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
的正确实现当您收到 post 请求时添加到该属性。
每次您需要验证该用户的数据时,您只需调用 validate
分配策略的方法。
如果每个 User
可以适合多种策略,您可以添加 List<Strategy>
作为一个属性而不是单个属性。
如果您不想更改 POJO,则必须在每次收到 post 请求时检查哪种策略是正确的。
除了validate
方法,您可以添加方法来处理数据,具体到每个策略。
希望这会有所帮助。
关于java - spring中基于groups的动态POJO验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46591861/
我刚刚发现了 Camel,它似乎正是我所需要的。 我有几个知道如何处理特定输入数据的构建 block ,所以我想创建一个非常简单的 GUI 供用户选择构建 block ,只需将它们一个接一个地链接起来
根据Convert Spark DataFrame to Pojo Object的回复我了解到 Dataframe是 Dataset 的别名. 我目前计算了 JavaPairRDD哪里CityStat
我使用的是jackson,场景是: 在客户端 (Android) 中生成对 Web 服务的 URL 调用 Web 服务以 json 形式返回“complex pojo”(具有与其他 pojo 相同的类
我需要将文档存储到 Elasticsearch 索引中,因此我定义了一个映射。我需要从我的 java 客户端向它提供看起来像 Compony 类的 pojo。它有很多重复的值。我可以使用对象组合模式来
所以我正在开发一个聊天应用程序。有一部分我感兴趣的是一次从数据库中检索 3 个实体。有一个 serverDto 实体和 accountDto 实体。每个服务器都有很多账户,账户里有一个字段叫做acti
我有一个 Java 中的 POJO 列表,我需要将其转换为另一种类型的 POJO 列表。两个 POJO 都有两个字符串字段。除了迭代原始列表并将新项目添加到结果列表之外,是否有更好的方法来执行此操作?
我正在开发一个 API 来访问存储在系统中的数据。该系统包含人员、约会和与这些约会相关的程序等内容。我的应用程序将严格为只读。 我正在使用带 RowMapper 的 Spring 来构建对象,例如“P
希望有人能帮助我。我有一个具有以下结构的 POJO: public class Invoice{ private String docNum; private String customer; pri
引用以下链接,我在运行时创建了类,http://blog.javaforge.net/post/31913732423/howto-create-java-pojo-at-runtime-with-j
所以我遇到了这个教程,将 POJO 序列化为 json,然后将 json 文件反序列化回 POJO。 http://www.mkyong.com/java/how-to-convert-java-ob
我是 Java 的新手。我只是对序列化和反序列化感到困惑。所以,我很困惑我应该使用哪一个。 我正在寻找一个回合,发现 Boon、Jackson、GSON(我目前正在使用 GSON,但一些文章使用 Ja
我确信这个问题可能已经被问过几次了,但我不明白我应该使用什么查询。我想要做的是,将 POJO 传递给另一个参数可以是动态的 POJO 像下面的例子 Class DataPOJO{ privat
我有一个有多页的注册表。所以,我将一页映射到一个 pojo。最后,当我处理数据库时,我想将其作为单个 pojo 提交。任何简化此模型的想法。 谢谢:) 最佳答案 您可以创建一个包装器 POJO,它在主
希望有人能帮助我。我有一个具有以下结构的 POJO: public class Invoice{ private String docNum; private String customer; pri
要求: 将 json 文件中选定的字段收集到 POJO 中(字段名称不匹配) 更新 POJO 的其他非映射字段 转换回带有 POJO 字段名的 jsonNode 问题:步骤 1 和 2 没问题。当将
我的 Spring Boot 应用程序中有两个 Pojo Pojo 1:FeedData 代码(我有获取和设置,只是没有在这里显示): package com.cms.tb.model; import
我们有两个 Pojo 文件。 Person { String name; int age; String address; String phoneNo; boolean isMa
我有一个数据库调用,如果没有任何条件匹配,则可能返回 null。如果有记录匹配,则结果是一个包含嵌入对象列表的 Pojo。我想将该 Pojo 转换为其嵌入对象 id 的列表。 Foo.class 有
我正在尝试使用流将 pojo 映射到 pojo 上的属性公开的一组项目。我意识到这还不清楚,所以我将展示我是如何在没有流的情况下完成的。 我有产品类别的枚举,产品的枚举和具有此类产品的商店列表 pub
我们在 Apache2 网络服务器后面的 Tomcat 6 中运行的 AXIS2 v1.5.2 中实现了一个 POJO 网络服务。 出于演示目的,我将重点介绍 validateUser 消息和相应的方
我是一名优秀的程序员,十分优秀!