Как настроить ключ в JSON для класса, если я не могу пометить этот класс аннотацией JsonTypeInfo? - PullRequest
0 голосов
/ 29 октября 2018

У меня есть такой код:

import org.codehaus.jackson.map.*;

public class MyPojo {
    int id;
    public int getId()
    { return this.id; }

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

    public static void main(String[] args) throws Exception {
        MyPojo mp = new MyPojo();
        mp.setId(4);
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);        
        System.out.println(mapper.writeValueAsString(mp));
    }
}

Работает ожидаемо:

{"MyPojo":{"id":4}}

Но я хочу настроить это имя. Я не могу пометить MyPojo с @JsonTypeInfo, потому что я беру этот класс из библиотеки.

Есть ли способ сделать это в Джексоне?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы можете использовать ObjectWriter также специально для этого класса:

MyPojo mp = new MyPojo();
mp.setId(4);
ObjectMapper mapper = new ObjectMapper();
ObjectWriter writer = mapper.writer().withRootName("TestPojo");
System.out.println(writer.writeValueAsString(mp));
0 голосов
/ 29 октября 2018

Вместо использования SerializationConfig.Feature.WRAP_ROOT_VALUE вы можете просто создать новый класс, подобный этому:

public class MyWrapper {

    private MyPojo myName = new MyPojo();

    public void setId(int id) { myName.setId(id); }
}

Если вы создаете JSON из объекта этого типа, атрибут будет иметь имя myName , например: {"myName" : {"id" : 4} }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...