在xmlRootElement之前使用SerializationFeature.WRAP_ROOT_VALUE

时间:2019-01-10 12:00:00

标签: serialization jackson jaxb

我只想了解SerializationFeature.WRAP_ROOT_VALUE的用途。 我实际上已经尝试禁用SerializationFeature.WRAP_ROOT_VALUE,对于我用xmlRootElement注释的类。在这种情况下,在禁用SerializationFeature.WRAP_ROOT_VALUE后,仍然在序列化后仍获得根值。为了避免产生根值,我必须使用xmlType。 因此,尝试了解SerializationFeature.WRAP_ROOT_VALUE的用途是什么?

我尝试过的示例代码

@XmlRootElement(name="person")
Public class Person {
@XmlElement(name = "insert")
    private int insert;

    @XmlElement(name = "update")
    private int update;
}

上面是我试图序列化的POJO类,我也使用过

 ObjectMapper mapper = new ObjectMapper();
 mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);

因此,使用上面的代码,输出为

"person" {
       "insert" : 1,
       "update" : 0
}

在同一情况下,如果我尝试在Person类中将xmlRootElement更改为XmlType,则输出为

{
  "insert" : 1,
  "update" : 0
}

所以我很困惑,如果未提供预期的输出,那么SerializationFeature.WRAP_ROOT_VALUE的用途是什么? 我正在使用杰克逊版本的2.9.6

1 个答案:

答案 0 :(得分:0)

深入研究之后发现,借助CXF,我可以通过在applicationcontext.xml文件中添加小的配置来解决此问题

 <bean class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
    <property name="dropRootElement" value="true" />
 </bean>