我在使用的库中遇到一个类的问题。
当我想反序列化它时,就会出现这个问题。
实际上,这个类有一个名为“getcopy”的方法,它返回自己的一个新示例,该示例包含相同的方法,并且仍然调用它 StackOverFlowException
在以下循环中:
在com.fasterxml.jackson.databind.ser.beanserializer.serialize(beanserializer。java:166)
在com.fasterxml.jackson.databind.ser.beanpropertywriter.serializeasfield(beanpropertywriter。java:728)
在com.fasterxml.jackson.databind.ser.std.beanserializerbase.serializefields(beanserializerbase。java:723)
public class Object {
...
ObjectAttribute objectAttribute;
...
public ObjectAttribute getObjectAttribute(){
return this.objectAttribute
}
...
}
public class ObjectAttribute{
...
public ObjectAttribute getCopy{
return copy(this) //return a new instance of himself
}
...
}
有没有办法忽略这个方法 getCopy()
就像 @JsonIgnoreAttribute("objectProperty.copy")
?
5条答案
按热度按时间0mkxixxg1#
您可以重写jsonserializer并为类执行特定的逻辑
使用
Serializer
用于ObjectMapper
:93ze6v8z2#
您可以注册序列化程序并选择所需的字段
up9lanfz3#
对于忽略方法
getCopy
,只需重命名此方法,例如copy
每种方法都从get
然后序列化,例如如果方法名为getSomething
然后序列化到something: (return value by method))
所以如果你把方法名改为copy
或者copyInstance
或者每个名字都没有开头get
则方法未序列化gajydyqb4#
有两种方法可以解决你的问题:
为特定类编写自定义反序列化程序,并在jacksonMap器中注册它。
调整全局jacksonMap器以忽略自动检测中的类getter,并仅使用字段。
请尝试以下配置的2种方式:
如果你决定单程前进,请写在这里如果你需要帮助。
zc0qhyus5#
对于这个特定的用例,当您在第三方库中有一个不能修改的类时,jackson提供了混合注解。
这个概念背后的思想是提供一个类来指示如何完成另一个类的序列化。
例如,在您的用例的类定义中考虑以下混合:
您可以在mix-in定义中使用完整的jackson注解集。
然后,将混合物与
ObjectAttribute
班级。您可以使用ObjectMapper
为此,您正在使用进行序列化:你也可以注册一个自定义模块代替;请参阅相关文件。