2011-11-07 25 views
1

我使用Scala的Jackson 1.9.1将对象编组为JSON。我的编组的代码如下所示:如何用Java Jackson重命名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()也没有被应用)?

任何指导如何实现这个感激的接收!

回答

4

您可以使用JAXB注释@XmlRootElement(使用JaxbAnnotationIntrospector时,您在此处)或Jackson自己的@JsonRootName(位于org.codehaus.jackson.map.annotate1)。

或者,如果你想这样做没有注释,也可以对AnnotationIntrospector的子类进行子类化并覆盖findRootName(...)方法 - 这是通常从注释中算出名称的方法,但是你可以实现任何自定义逻辑想。

+0

谢谢@StaxMan,这很好。 (我用'@ XmlRootElement'选项去了)。 –