Как использовать 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
,