Как использовать Immutables с публичным конструктором, но не сериализовать в стиле кортежей?

Я использую 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

    ["someValueOfX", true]

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам