Серийный номер/десериализация

My POJO:

import org.jongo.marshall.jackson.id.Id;

public class User {    

    @Id
    private String id;
    private String name;
    private int age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Я получаю пользователя от базы данных mongo и хочу вывести его в файл с помощью карты jackson

ObjectMapper mapper = new ObjectMapper();
mapper.writerWithDefaultPrettyPrinter().writeValue(new File("c:/user.txt"), user);

и я получаю что-то вроде этого в своем файле

{
    "name" : "John",
    "age" : 23,
    "_id" : {
      "time" : 1358443593000,
      "inc" : 660831772,
      "machine" : 2028353122,
      "new" : false,
      "timeSecond" : 1358443593
    }
}

Мне нужно, чтобы поле id хранилось в файле как строка, потому что, когда я десериализую этот объект, мое поле id в pojo выглядит примерно так:

{ "время": 1358443593000, "вкл": 660831772, "машина": 2028353122, "новый" ложь "timeSecond": 1358443593}

Любая помощь будет оценена

Ответ 1

Отвечая на мой вопрос. Найденное решение здесь Spring 3.2 и Jackson 2: добавьте настраиваемый объект mapper

Мне нужен пользовательский сопоставитель объектов и сериализатор ObjectId.

public class ObjectIdSerializer extends JsonSerializer<ObjectId> {

    @Override
    public void serialize(ObjectId value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        jgen.writeString(value.toString());
    }
}


public class CustomObjectMapper extends ObjectMapper {

    public CustomObjectMapper() {
        SimpleModule module = new SimpleModule("ObjectIdmodule");
        module.addSerializer(ObjectId.class, new ObjectIdSerializer());
        this.registerModule(module);
    }

}