После обновления до Jongo 1.1 и Play 2.3.3 атрибут id всегда имеет имя «_id» при десериализации, я хочу, чтобы атрибут сохранял имя поля, но я могу это сделать. Не используйте @JsonProperty("custom_name"), поскольку аннотация Jongo @Id делает @JsonProperty("_id") скрыто.
Код: Выделить всё
import org.jongo.marshall.jackson.oid.Id;
import org.jongo.marshall.jackson.oid.ObjectId;
public class PretendPojo {
@Id
@ObjectId
private String id;
private String name;
public PretendPojo() {
}
public PretendPojo(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Код: Выделить всё
{
"_id" : ObjectId("53fc984de4b0c34f1905b8ee"),
"name" : "Owen"
}
Код: Выделить всё
{"name":"Owen","_id":{"time":1409072858000,"date":1409072858000,"timestamp":1409072858,"new":false,"timeSecond":1409072858,"inc":308487737,"machine":-458223042}}
Код: Выделить всё
{"name":"Owen","_id":"53fcbedae4b0123e12632639"}
Код: Выделить всё
@Test
public void testJongoIdDeserialization() throws UnknownHostException {
DB database = new MongoClient("localhost", 27017).getDB("jongo");
Jongo jongo = new Jongo(database);
MongoCollection collection = jongo.getCollection("jongo");
collection.save(new PretendPojo("Owen"));
PretendPojo pretendPojo = collection.findOne("{name: \"Owen\"}").as(PretendPojo.class);
JsonNode json = Json.toJson(pretendPojo);
assertNotNull(json.get("id"));
}
В идеале результат, который я ищу, будет:
Код: Выделить всё
{"name":"Owen","id":"53fcbedae4b0123e12632639"}

Подробнее здесь: https://stackoverflow.com/questions/255 ... nd-mongodb