我想与邮递员发送一个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')"
}
]
}
答案 0 :(得分:0)
将字段“ FilesToPurchase”重命名并设置为“ filesToPurchase”以匹配Java约定并尝试
{ "buyer": { "id" : "5bb5d6634e5a7b2bea75d4a2" }, "filesToPurchase": [ { "id" : "5bb5d6634e5a7b2bea75d4a5" } ] }
通过用@RequestBody
标记控制器参数,您要求Spring将输入的json反序列化为Java对象(默认情况下使用Jackson ObjectMapper)。它不会自动填充整个@Dbref
字段,如果需要,您可以通过查询mongo自己完成,但是在引用对象中保存与之相对应的对象的唯一字段是'id'。