我正在使用Scala的Jackson 1.9.1将对象编组为JSON。我的编组代码如下所示:
val mapper = new ObjectMapper()
mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true)
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy())
val introspectorPair = new AnnotationIntrospector.Pair(
new JacksonAnnotationIntrospector(),
new JaxbAnnotationIntrospector()
)
mapper.getSerializationConfig().withAnnotationIntrospector(introspectorPair)
val writer = mapper.defaultPrettyPrintingWriter
writer.writeValueAsString(this)
这产生的典型JSON看起来像这样:
{
"SalesOrder" : {
"id" : "3187e7d0-f84f-11e0-be50-0800200c9a66",
"total_paid" : 8.99,
"created_at" : "2011-05-14T00:00:00.000+0300",
"updated_at" : "2011-05-14T00:00:00.000+0300"
}
}
我的问题是:如何将根密钥从“SalesOrder”重命名为更适合JavaScript的“sales_order”?在我的类定义之上添加JsonProperty
覆盖不起作用 - 可能是因为根密钥不是严格的属性(因此也setPropertyNamingStrategy()
也没有应用)?
任何关于如何实现这一目标的指导感激不尽!
答案 0 :(得分:4)
你可以使用JAXB注释@XmlRootElement
(使用JaxbAnnotationIntrospector,你在这里),或杰克逊自己的@JsonRootName
(在org.codehaus.jackson.map.annotate1
中)。
或者,如果您想在没有注释的情况下执行此操作,也可以对AnnotationIntrospector中的一个进行子类化并覆盖findRootName(...)
方法 - 这就是要使用的名称,通常来自注释,但您可以实现任何你想要的自定义逻辑。