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

Json 启用/禁用moxy序列化的字段,默认设置为禁用,json,jaxb,jersey,moxy,Json,Jaxb,Jersey,Moxy,我已经阅读了很多关于使用moxy自定义序列化选项的文章(请参见示例),但是我似乎找不到一种简单的方法来默认排除字段,而是在设置某个属性时将其包括在内 例如,如果我有一个包含三个字段的简单POJO @XmlAccessorType(XmlAccessType.FIELD) public class Person{ @XmlElement private String email; @XmlElement private String fullName; @XmlElement

我已经阅读了很多关于使用moxy自定义序列化选项的文章(请参见示例),但是我似乎找不到一种简单的方法来默认排除字段,而是在设置某个属性时将其包括在内

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

@XmlAccessorType(XmlAccessType.FIELD)
public class Person{

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

}
…我希望在序列化时默认不包含ssn,但仅在设置特定封送拆收器属性(或类似属性)时才包含它。我该怎么做呢?换句话说,默认情况下禁用该字段,但在我明确要求时将其包括在内。即使我采用了前面文章中的一个答案中提到的显式@XmlNamedObjectGraph方法,我的默认选项仍然是包含所有字段的对象图


提前感谢您的帮助

如果在创建
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);
Map属性=新的HashMap(1);
put(JAXBContextProperties.OBJECT_GRAPH,“yourGraphName”);
JAXBContext jc=JAXBContext.newInstance(新类[]{Foo.Class},属性);

感谢Blaise的快速响应!我希望我可以通过域类本身强制执行该规则。我试图迫使用户在编组时有意识地决定公开此字段。如果可能的话,我不介意通过上下文中的属性启用此公开,但我确实希望默认编组不包括字段。因为我不会总是控制JAXBContext,所以我不能保证他们会正确设置它。有没有一种方法可以将字段标记为@XmlTransient,但如果指定了对象图,则可以删除该名称?@jmdev-可以有2个jaxbcontext。第一种是通过表示所需默认行为的注释来使用元数据。第二个使用MOXy的外部映射文档覆盖元数据:再次感谢Blaise!根据您的建议,我默认使用注释,并提供允许封送敏感字段的绑定。