Отправка POST-запроса почтальоном с помощью @DBref - PullRequest
0 голосов
/ 04 октября 2018

Я хочу отправить POST-запрос почтальону, который создает объект покупки и сохраняет его в базе данных.

Мой класс Покупка:

@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 из-за полученного пустого объекта Purchase.

Я не знаю, как обрабатывать аннотацию @DBRef.В Почтальоне я пытаюсь отправить JSON так:

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

1 Ответ

0 голосов
/ 04 октября 2018

Переименуйте поле «FilesToPurchase» и установите его в «filesToPurchase», чтобы соответствовать соглашениям Java, и попробуйте это

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

. Отметив параметр контроллера с помощью @RequestBody, вы просите Spring десериализовать входной json для объекта java (Джексон).ObjectMapper используется по умолчанию).Он не будет автоматически заполнять все поле @Dbref, вы должны сделать это самостоятельно, запросив монго, если хотите, однако единственное поле, которое вам нужно в указанном объекте для сохранения объекта, который ссылается на него, это 'id'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...