I am following this spring guide: https://spring.io/guides/gs/accessing-mongodb-data-rest/
Everything is perfect, however if I want to POST a document with manual id, I am not able to do that.
Here is what all I have done:
I inserted one document from Mongo shell by the command db.person.insert({"_id": "111111", "firstName" : "Vikas", "lastName" : "Prasad"});
This works fine and if I do a GET
at http://localhost:8080/people
from Postman, I can see the person document with id 111111
in the response having self href as http://localhost:8080/people/111111
But if I am sending a POST
request from Postman at http://localhost:8080/people
with body as {"_id": "222222", "firstName" : "Aadish", "lastName" : "Patodi"}
, the document is getting inserted with an auto id instead of 222222
. Because of which obviously I cant access this docuemnt by doing a GET
at http://localhost:8080/people/222222
unlike the case when I used insert()
from the shell to insert a document with manual id. Instead I have to hit a GET
at http://localhost:8080/people/57bc29ada3fab115cc9b546b
to fetch this second document.
Just to check if I am POST
ing the {"_id": "222222", "firstName" : "Aadish", "lastName" : "Patodi"}
again, its getting inserted again at a new auto generated id: http://localhost:8080/people/57bc2bdaa3fab115cc9b546c
. It means MongoDB is not even looking at the _id
, else it must have thrown duplicate key error
.
I tried searching various sources. All I can found is an implementation of the data access code separately in JAVA at back end and calling respective MongoDB methods.
My question is:
Just like in the given tutorial they are performing every operation without defining any JAVA back end code for data access from MongoDB for auto id documents, is there a way to do the same for manual id documents? Or just for this one use case I have to implement the data access code at the back end?
I am using CorsFilter to handle cross origin requests.
Edit:
Below is the Person
class:
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;
}
}
I have tried:
-> adding getter and setter for id
attribute
-> renaming id
to employeeNumber
-> renaming id
to employeeNumber
and adding getter and setter for employeeNumber
None of the above three solved the issue.
as discussed on the comment, looks like your _id field is not mapped correctly. Can you check if the _id is mapped correctly in the pojo ?