Java 反序列化序列化对象时出现问题 我有一个kotlin数据类,它有一个参数化构造函数,还有一个基于属性派生其输出的方法 我已经用@JsonProperty注释了这个方法,这样它的派生输出也可以序列化为输出JSON,因为这是我的一个要求 现在,当我尝试反序列化这个JSON时,问题出现了,它没有找到任何用于derivedProp的字段

Java 反序列化序列化对象时出现问题 我有一个kotlin数据类,它有一个参数化构造函数,还有一个基于属性派生其输出的方法 我已经用@JsonProperty注释了这个方法,这样它的派生输出也可以序列化为输出JSON,因为这是我的一个要求 现在,当我尝试反序列化这个JSON时,问题出现了,它没有找到任何用于derivedProp的字段,java,kotlin,jackson,deserialization,Java,Kotlin,Jackson,Deserialization,无法构造MyDataClass的实例,问题:不应调用 无setterless属性('derivedProp')上的set() 如果使用属性而不是函数,则仍然可以定义setter并在调用它时忽略它。不是最漂亮的解决方案,但应该做到: @get:JsonProperty var derivedProp: List<Any> get() = someLogicOnMainProp(mainProp) set(value) { /* do nothing */ } @get

无法构造MyDataClass的实例,问题:不应调用 无setterless属性('derivedProp')上的
set()


如果使用属性而不是函数,则仍然可以定义setter并在调用它时忽略它。不是最漂亮的解决方案,但应该做到:

@get:JsonProperty
var derivedProp: List<Any>
    get() = someLogicOnMainProp(mainProp)
    set(value) { /* do nothing */ }
@get:JsonProperty
var-derivedProp:List
get()=someLogicOnMainProp(mainProp)
设置(值){/*不执行任何操作*/}

我使用@JsonProperty注释上的以下属性解决了这个问题:

@JsonProperty(access = Access.WRITE_ONLY)

val
定义了不可变变量,因此没有val的setter。使用
var
而不是
val
将解决此问题。问题不在于声明为val的3个属性,而在于第四个属性,它是在序列化时创建的,因为方法derivedProp()可能重复。请解释一下,如何解决?这可能是一个解决办法,但这将以运行时的数据冗余为代价,寻找更好的解决方案:-)我不太明白,它将如何冗余?您现在只拥有一个属性,而不是一个函数。因为数据将是冗余的(mainProp和derivedProp),所以不会,因为derivedProp只是您在mainProp上调用的一个函数。它不是单独存储的。。。
@JsonProperty(access = Access.WRITE_ONLY)