Как маршалировать вложенное содержимое класса, но без добавления имени атрибута в качестве его ключа - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть этот класс:

public class EnvironmentInformation implements Serializable {

    private final String[] profiles;

    //GETTERS/SETTERS

Объект этого класса добавляется на карту с ключом "environment".Когда я выполняю маршалинг карты с помощью картографа объектов Джексона, я получаю:

{"environment":{"profiles":["dev"]}}

Однако я хотел бы получить следующее:

{"environment": ["dev"]}

Есть ли способ настроить процесс маршалинга для полученияэтот результат?

Обратите внимание, я не могу изменить структуру класса EnvironmentInformation (хотя я мог бы добавить аннотации),

1 Ответ

0 голосов
/ 22 декабря 2018

Решена реализация JsonSerializable:

public class EnvironmentInformation implements Serializable, JsonSerializable {

    private final String[] profiles;

    public EnvironmentInformation(String[] environment) {
        this.profiles = environment;
    }

    public String[] getProfiles() {
        return profiles;
    }

    @Override
    public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartArray();
        for (String fooValue : getProfiles()) {
            gen.writeString(fooValue);
        }
        gen.writeEndArray();
    }

    @Override
    public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
        serialize(gen, serializers);
    }
}
...