【问题标题】:Sending POST request with Postman with @DBref使用 @DBref 使用 Postman 发送 POST 请求
【发布时间】:2019-03-09 16:09:22
【问题描述】:

我想向 Postman 发送一个 POST 请求,该请求创建一个 Purchase 对象并将其保存在数据库中。

我的班级购买:

@Document(collection = "purchases")
public class Purchase {

    @Id
    private String id;
    @DBRef
    private User buyer;
    @DBRef
    private List<File> FilesToPurchase;
    private Long timestamp;

    public Purchase() { }

    public Purchase(User buyer, List<File> filesToPurchase) {
        this.buyer = buyer;
        FilesToPurchase = filesToPurchase;
    }

// Getters and setters not posted here.

我想在数据库中插入一个已经存在的用户“买家”完成的新购买,该用户想要购买已经存在的文件“FilesToPurchase”列表。

我的控制器中有一个 POST 函数,它使用注释 @RequestBody 接收购买对象,但到目前为止,由于接收到空的购买对象,我得到了 NullPointerExceptions。

我不知道如何处理@DBRef 注释。在 Postman 中,我尝试发送这样的 JSON:

{
    "buyer": {
        "$ref":"users",
       "$id" : "ObjectId('5bb5d6634e5a7b2bea75d4a2')"
    },
    "FilesToPurchase": [
     { "$ref":"files",
       "$id" : "ObjectId('5bb5d6634e5a7b2bea75d4a5')"
     }
  ] 
} 

【问题讨论】:

  • 重命名字段“FilesToPurchase”并设置为“filesToPurchase”以匹配java约定并尝试这个{“buyer”:{“id”:“5bb5d6634e5a7b2bea75d4a2”},“filesToPurchase”:[{“id” :“5bb5d6634e5a7b2bea75d4a5”}]}
  • @VladMamaev 感谢您的回复。我更改了名称并按照您告诉我的方式进行操作,在我的 post 函数中创建了对象 Purchase,但里面的“buyer”和“filesToPurchase”是空的,除了字段“id”。这种行为好吗?是因为它只存储引用吗?

标签: spring mongodb spring-boot postman


【解决方案1】:

重命名字段“FilesToPurchase”并将设置器设置为“filesToPurchase”以匹配 Java 约定并尝试此操作

{ "buyer": { "id" : "5bb5d6634e5a7b2bea75d4a2" }, "filesToPurchase": [ { "id" : "5bb5d6634e5a7b2bea75d4a5" } ] }

通过使用@RequestBody 标记控制器参数,您要求Spring 将输入json 反序列化为java 对象(默认使用Jackson ObjectMapper)。它不会自动填充整个 @Dbref 字段,如果需要,您应该通过查询 mongo 自己完成,但是您需要在引用对象中保存引用它的对象的唯一字段是“id”。

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 2016-02-13
    • 2021-05-11
    • 1970-01-01
    • 2021-05-09
    • 2019-01-09
    • 2013-09-24
    • 2013-10-06
    • 2015-02-28
    相关资源
    最近更新 更多