我已经阅读了很多关于使用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方法,我仍然使用默认选项作为包含所有字段的对象图。
提前感谢您的帮助!
答案 0 :(得分:1)
如果您在创建JAXBContext
时指定对象图名称,则默认情况下会在从其创建的所有Marshaller
和Unmarshaller
个实例中设置它。
Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put(JAXBContextProperties.OBJECT_GRAPH, "yourGraphName");
JAXBContext jc = JAXBContext.newInstance(new Class[] {Foo.class}, properties);