Как использовать Immutables с публичным конструктором, но не сериализовать в стиле кортежей? - PullRequest
0 голосов
/ 22 февраля 2019

Я использую Immutables и настраиваю свой сгенерированный класс для создания экземпляра через конструктор.

@Gson.TypeAdapters
@Value.Immutable(builder = false)
@Value.Style(
        of = "new",
        allParameters = true,
        get = {"get*", "is*"})
public interface MyClass {
  String getX();
  boolean isGreen();
}

Однако теперь экземпляры сериализуются в виде кортежей, как указано в https://immutables.github.io/json.html#tuples-of-constructor-arguments

    ["someValueOfX", true]

Вместо этого мне требуется та же сериализация, что и при использовании построителя вместо конструктора

    {
      "x" : "someValueOfX",
      "green" : true
    }

Можно ли отключить сериализацию в кортеж?

1 Ответ

0 голосов
/ 23 февраля 2019

Похоже, что переключение формата является преднамеренным побочным эффектом, который вы получаете, используя builder=false - по ссылке:

Чтобы маршалировать объект как кортеж, необходимо аннотировать аргументы конструктора иотключить генерацию сборщиков

Я согласен, что неловко связывать существование сборщика с форматом сериализации, но, похоже, это единственный способ ... поэтому лучший способ получить желаемый формат сериализации - просто удалить builder=false.

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