使用@DBref与Postman发送POST请求

时间:2018-10-04 09:52:08

标签: spring mongodb spring-boot 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接收Purchase对象,但是到目前为止,由于收到的采购对象为空,所以出现了NullPointerExceptions。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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