启用/禁用moxy序列化的字段,默认为禁用

时间:2014-08-07 15:46:30

标签: json jaxb jersey moxy

我已经阅读了很多关于使用moxy的自定义序列化选项的帖子(请参阅Jaxb marshalling with custom annotations作为示例),但我似乎找不到一种简单的方法来默认排除字段,但在设置某些属性时包含它。

例如,如果我有一个包含三个字段的简单POJO

@XmlAccessorType(XmlAccessType.FIELD)
public class Person{

   @XmlElement private String email;
   @XmlElement private String fullName;
   @XmlElement private String ssn;

}

...我希望在序列化时默认保留ssn,但仅在我设置特定的marshaller属性(或类似物)时才包含它。我该怎么做呢?换句话说,默认情况下禁用该字段,但在我明确要求时将其包括在内。即使我采用上述帖子中的一个答案中提到的显式@XmlNamedObjectGraph方法,我仍然使用默认选项作为包含所有字段的对象图。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果您在创建JAXBContext时指定对象图名称,则默认情况下会在从其创建的所有MarshallerUnmarshaller个实例中设置它。

Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put(JAXBContextProperties.OBJECT_GRAPH, "yourGraphName");
JAXBContext jc = JAXBContext.newInstance(new Class[] {Foo.class}, properties);