我有一个名为 User
的 POJO,它也用于在 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
类中列出的数据子集进行注册。我的 Controller 中的register方法的签名如下。
public GenericResponse registerUser(@RequestBody User userRegistrationRequest)
可以注意到,我使用相同的 POJO 来进行注册请求。到现在为止一切都很好。我可以很好地保留数据用户对象。
此注册 API 仅用于保存一小部分用户数据。 MongoDb 文档中还会有其他信息,可以从其他一些 API 访问/保留这些信息。
假设用户已经注册了基本信息,并且还通过除注册信息之外的API保存了其他信息。
我如何创建一个 API,它可以使用相同的 User Pojo 再次从 User
文档中获取一些选择性数据?如果我调用存储库来提供特定用户 ID 的数据,它将为我提供映射到 User 类的整个文档。我不希望我的 API 提供文档中存储的所有信息。
一种方法是使用我想要的详细信息制作另一个 POJO,并使用 Converter
有选择地映射信息。但是,我想避免这种方法,因为我想使用同一个类。
第二种方法:修改 Mongo 查询以选择性地返回数据,如 docs 中给出的那样。 。但在这里我必须指定结果集中我想要的所有字段。这又是一个长度查询。
是否有更好的方法从对象中过滤掉数据?
最佳答案
How would I make an API which can just get me some selective data from the User document again using the same User Pojo?
晚上我想带我的女孩去餐厅,我该如何开一辆汽车去越野? 我不会 - 如果我拥有同一辆车来处理所有事情,我会在餐厅旁边看起来很愚蠢,在套房里出来,或者我会陷入沼泽。
Java最大的优势是object creation time - 你不应该害怕它。只需创建另一个模型用于注册,另一个作为 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 尽可能简单
关于java - 忽略在 Json 对象中传递的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57346985/