java - 忽略在 Json 对象中传递的字段

标签 java mongodb spring-boot spring-data

我有一个名为 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/

相关文章:

node.js - 连接到 atlas mongo 数据库

java - 从下拉菜单中获取选定的值 - Thymeleaf + Spring Boot

java - 在 Spring Boot 中使用 @TestPropertySource 覆盖 @PropertySource

java - 如何排除旧版本的maven依赖并使用它的新版本?

java - 无法迭代完整的 HashSet

java - Hibernate AttributeOverride 注释错误

java - ZeroConf 浏览器中未找到 JmDNS 服务

mongodb - 从 redis 列表查询 moongoDB

javascript - 在javascript中循环完成后如何执行语句?

javascript - 即使操作成功,Ajax post 也返回 404