我有几个扩展LinkedHashMap<String, Object>
的模型类:它们定义了 Package Map的get和put方法的getter和setter。我尝试使用Jackson序列化这些类的示例(使用RESTEasy),但是Jackson拒绝关注我的getter(用@JsonProperty
注解),相反,它只是序列化支持Map的键-值对。但这并没有改变什么,有没有办法阻止Jackson自动序列化Map,或者我必须创建不扩展LinkedHashMap<String, Object>
的新模型类?
4条答案
按热度按时间sxissh061#
我同意@skaffman的回答。但是如果你不能轻易地彻底改变继承结构,也许有办法解决这个问题。
一种可能性是,如果确实有定义getter/setter的接口,则可以添加
这将迫使Jackson仅使用通过特定接口可用任何内容。
自定义的序列化器/反序列化器也是一种可能,但这是相当多的工作。
lmvvr0a82#
我有几个扩展
LinkedHashMap<String, Object>
的模型类:它们定义了 Package Map的get和put方法的getter和setter这是一个典型的例子,说明什么时候 * 不 * 使用继承:您会发现其他一些代码(例如Jackson)将您的类视为其超类的示例,而这不是您希望它做的。在这种情况下(一般情况下也是如此),通常使用组合比使用继承更好。
我建议重写你的模型类来 * 包含 * 一个Map,而不是扩展一个Map。你得到的控制比方法多得多,得到的模型也不那么脆弱。如果你需要以
Map
的形式查看你的模型,那么实现一个asMap
方法(或者类似的方法)来呈现这个视图。s5a0g9ez3#
您可以实现自己的
org.codehaus.jackson.map.DeserializerProvider
,它扩展了Jackson的org.codehaus.jackson.map.deser.StdDeserializerProvider
并覆盖_createDeserializer
方法:(1)使用符合您需要的if-condition
自定义反序列化程序直接在ObjectMapper中注册:
我用Jackson 1.9.11测试了这个。
ppcbkaq54#
在较新版本的jackson中(我猜〉= 2.9),只需使用