Cannot construct instance of
MyDataClass
, problem: Should never callset()
on setterless property ('derivedProp')
@JsonIgnoreProperties(ignoreUnknown = false)
data class MyDataClass(
val boolProp: Boolean = true,
val dataProp: DataProp = DataProp(),
val mainProp: String? = null
) : Serializable {
@JsonProperty
@Suppress("unused")
fun derivedProp(): List =
someLogicOnMainProp(mainProp)
}
проблема не в трех свойствах, объявленных как val, а в четвертом, который создается во время сериализации из-за метода производногоProp ()
Возможный дубликат Только использование @JsonIgnore во время сериализации, но не десериализации
не могли бы вы объяснить, как?
Если вы используете свойство вместо функции, вы все равно можете определить сеттер и просто игнорировать его при его вызове. Не самое красивое решение, но должно помочь:
@get:JsonProperty
var derivedProp: List<Any>
get() = someLogicOnMainProp(mainProp)
set(value) { /* do nothing */ }
Это может быть обходным путем, но это будет стоить избыточности данных во время выполнения, ища лучшее решение :-)
Я не совсем понимаю, как это будет лишним? Вместо функции у вас теперь просто свойство.
потому что данные будут избыточными (mainProp и производноеProp)
Нет, не будет, потому что производнаяProp - это просто функция, которую вы вызываете в mainProp. Отдельно не хранится ...
Я решил эту проблему, используя свойство ниже в аннотации @JsonProperty:
@JsonProperty(access = Access.WRITE_ONLY)
val
определяет неизменяемые переменные, поэтому для val нет установщика. Использованиеvar
вместоval
решит проблему.