Я следую этой весной руководство: https://spring.io/guides/gs/accessing-mongodb-data-rest/Как отправить POST документ с ручным идентификатором в базе данных MongoDB из Spring RESTful Spring на базе гипермедиа?
Все отлично, но если я хочу, чтобы отправить документ с ручным ид, я не в состоянии сделать это.
Вот что все, что я сделал:
Я вставил один документ из Монго оболочки с помощью команды db.person.insert({"_id": "111111", "firstName" : "Vikas", "lastName" : "Prasad"});
Это прекрасно работает, и если я делаю GET
в http://localhost:8080/people
от Postman, я могу видеть человека документ с идентификатором 111111
в ответ, имеющего себе HREF, как http://localhost:8080/people/111111
Но если я направляю POST
запрос от Почтальон в http://localhost:8080/people
с телом, как {"_id": "222222", "firstName" : "Aadish", "lastName" : "Patodi"}
, й В документ вставлен автоматический идентификатор вместо 222222
. Из-за чего я, очевидно, не могу получить доступ к этому документу, выполнив GET
по адресу http://localhost:8080/people/222222
, в отличие от случая, когда я использовал insert()
из оболочки, чтобы вставить документ с ручным идентификатором. Вместо этого я должен нажать GET
на http://localhost:8080/people/57bc29ada3fab115cc9b546b
, чтобы получить этот второй документ.
Просто проверьте, есть ли я снова с номером {"_id": "222222", "firstName" : "Aadish", "lastName" : "Patodi"}
, его получение снова вставлено при новом автогенерированном идентификаторе: http://localhost:8080/people/57bc2bdaa3fab115cc9b546c
. Это означает, что MongoDB даже не смотрит на _id
, иначе он должен был выбросить duplicate key error
.
Я пробовал искать различные источники. Все, что я могу найти, это реализация кода доступа к данным отдельно в JAVA на задней панели и вызов соответствующих методов MongoDB.
Мой вопрос:
Так же, как в данном учебнике они выполняют все операции без определения какого-либо JAVA обратно конечного кода для доступа к данным из MongoDB для автоматической идентификации документов, есть способ сделать то же самое для руководства идентификационные документы? Или просто для этого одного варианта использования я должен реализовать код доступа к данным на заднем конце?
Я использую CorsFilter для обработки запросов перекрестного происхождения.
Edit:
Ниже Person
класс:
package hello;
import org.springframework.data.annotation.Id;
public class Person {
@Id private String id;
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Я пробовал:
-> добавление геттер и сеттер для id
атрибута
-> переименование id
до employeeNumber
-> переименование id
к employeeNumber
и добавление получения и установки для employeeNumber
Ни одно из этих трех решить эту проблему.
Можете ли вы вставить свой код? где вы сохраняете коллекцию в db и ту, где вы объявили человека pojo, чтобы сопоставить поле id весной до mongodb? – user641887
похоже, что ваше поле _id неверно отображено. – user641887
Нет явной экономии коллекции для db, как видно из руководства. Коллекция создается на первом «POST» из Postman или из первого 'insert()' из оболочки, в зависимости от того, что произойдет раньше. Человек pojo такой же, как в руководстве. Но я добавил редактирование. Пожалуйста, смотрите. –