Renomeie ObjectId _id para id na desserialização de jackson com Jongo e MongoDB

Acabei de começar a trabalhar em um projeto usando o framework framework, jongo e MongoDB. O projeto foi inicialmente escrito no Play 2.1 com pojos com um campo de ID de seqüência de caracteres anotado com: @Id e @ObjectId Isso persistiria no Mongo como um ObjectId e, quando desserializado, produziria o ID como: "id": "53fcb9ede4b0b18314098d10", por exemplo .

Desde a atualização para o Jongo 1.1 e o Play 2.3.3, o atributo id sempre é chamado "_id" quando desserializado, desejo que o atributo retenha o nome do campo, mas não posso usar @JsonProperty ("custom_name") como a anotação Jongo @Id @JsonProperty ("_ id") nos bastidores.

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;
    }
}

Os POJOs quando persistidos no MongoDB ficam assim se eu os visualizar via RoboMongo

{
    "_id" : ObjectId("53fc984de4b0c34f1905b8ee"),
    "name" : "Owen"
}

No entanto, quando eu desserializá-los, obtenho o seguinte json se eu mantiver as duas anotações:

{"name":"Owen","_id":{"time":1409072858000,"date":1409072858000,"timestamp":1409072858,"new":false,"timeSecond":1409072858,"inc":308487737,"machine":-458223042}}

e a saída a seguir se eu usar apenas a anotação @Id.

{"name":"Owen","_id":"53fcbedae4b0123e12632639"}

Eu tenho um caso de teste para trabalhar com o PretendPojo show acima:

   @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"));
    }

Ao tentar usar desserializadores personalizados, nunca consigo obter o ID do objeto. Parece que só tenho acesso aos dados de data / hora / carimbo de data / hora que estão sendo desserializados no momento.

Idealmente, a saída que estou procurando seria:

  {"name":"Owen","id":"53fcbedae4b0123e12632639"}

Qualquer ajuda será muito apreciada! :)

questionAnswers(4)

yourAnswerToTheQuestion