java - 忽略在 Json 对象中传递的字段
问题描述
我有一个 POJO User
,它也被用于在 MongoDb 中插入文档。
@Data
@Document(collection = Constants.COLLECTION_USERS)
public class User {
public ObjectId _id;
public String userID;
public String email;
public String name;
public String sex;
public String dob;
public String photo;
//have more variables
}
我有一个简单的应用程序,用户通过提供类中列出的数据子集进行注册User
。我的控制器中注册方法的签名如下。
public GenericResponse registerUser(@RequestBody User userRegistrationRequest)
可以注意到我在注册请求中使用了相同的 POJO。直到现在一切都很好。我可以很好地保留数据用户对象。
此注册 API 仅用于保存一小组用户数据。MongoDb 文档中还有其他信息,可以从其他一些 API 访问/保留这些信息。
假设用户已经注册了基本信息,并且还通过注册以外的 API 保存了其他信息。
我将如何制作一个 API,它可以User
使用相同的 User Pojo 再次从文档中获取一些选择性数据?如果我调用存储库以提供特定用户 ID 的数据,它将为我提供映射到 User 类的整个文档。我不希望我的 API 提供存储在文档中的所有信息。
一种方法是使用我想要的详细信息制作另一个 POJO,并使用Converter
. 但是,我想避免这种方法,因为我想使用同一个类。
第二种方法:修改 Mongo 查询以选择性地返回数据,如文档中给出的。但是在这里我必须在结果集中指定我想要的所有字段。这又是一个长度查询。
有没有更好的方法从对象中过滤掉数据?
解决方案
我将如何制作一个 API,它可以使用相同的用户 Pojo 再次从用户文档中获取一些选择性数据?
晚上我想带我女孩去餐厅,我怎么开车去越野?我不会——如果我的所有东西都用同一辆车,我会在餐厅旁边看起来很愚蠢,在套房里出来,或者我会陷入沼泽。
Java 最大的优势是对象创建时间——你不应该害怕它。只需创建另一个用于注册的模型,另一个作为 DTO 用于保存数据,另一个用于前端演示等
永远不要混合对象的责任。你会完成类似的东西
@Entity
class ThePileOfShit {
@Id
private Long id;
@my.audit.framework.Id
private String anotherId;
@JsonIgnore
// just a front-end flag ignore
private boolean flag;
@Column
// not a field but getter because of any-weird-issue-you-want-to-put-here
public String getWeirdStuff() { ... }
// Useless converters
public ModelA getAsModelA() { ... }
public ModelB getAsModelB() { ... }
// etc
// etc
}
四种框架,五种技术——没有人知道发生了什么。
如果您害怕转换东西,请使用ModelMapper或其他工具,但要让您的 POJO 尽可能简单
推荐阅读
- python - 无法使用 Python SqlAlchemy 将数据写入 Vertica 数据库 - 类型“TEXT”不存在
- dart - 使用自定义名称重用自定义颜色
- c# - 无法在 Gmap.net 中获取 GMapMarkerCircle 的 Click 事件
- r - 如何在具有聚集标准错误的 lm_robust() 之后获得边际效应?
- elasticsearch - ElasticSearch:在属性和嵌套对象上使用 query_string 的多字段查询
- sql - SQL 错误 - 不允许从数据类型 int 到日期的显式转换
- php - 使用电子邮件类的联系表
- r - 如何检查向量的值是否在减少
- sqlite - CREATE附近的Sqlite创建表错误
- java - Mockiito 错误的返回值?