假设我有一个对象
@XmlRootElement(name = "publisher")
class Person
{
@XmlElement(required = true)
int id;
@XmlElement(required = true)
String name;
}
我想生成像
<person>
<id>1</id>
<name>test</name>
</person>
假设名称是test10我不想在我的xml中使用该项目。无论如何要实现这一点。
答案 0 :(得分:3)
您可以执行以下操作:
用例#1 - 不是基于名称元素的Marshal Person对象
如果人是根对象
如果Person
是根对象,那么您可以按照JB Nizet在此问题的评论中的建议执行以下操作。
if (!"test10".equals(person.getName()) {
marshaller.marshal(person);
}
如果Person是引用对象
如果Person
不是根对象,那么您可以对此用例使用XmlAdapter
。它看起来像下面这样:
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class PersonAdapter extends XmlAdapter<Person, Person> {
@Override
public Person unmarshal(Person person) throws Exception {
return person;
}
@Override
public Person marshal(Person person) throws Exception {
if(mull == person || "test10".equals(person.getName()) {
return null;
}
return person;
}
}
使用XmlAdapter
注释指定@XmlJavaTypeAdapter
。可以在字段/属性,类型和包级别配置此批注。有关示例,请参阅:
用例#2 - 基于其值的非元帅名称元素
如果您只是想避免根据其值调整name元素,那么您可以再次使用XmlAdapter
:
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class NameAdapter extends XmlAdapter<String, String> {
@Override
public String unmarshal(String string) throws Exception {
return string;
}
@Override
public String marshal(String string) throws Exception {
if("test10".equals(string) {
return null;
}
return string;
}
}
您的Person
课程如下:
@XmlRootElement(name = "publisher")
class Person
{
@XmlElement(required = true)
int id;
@XmlElement(required = true)
@XmlJavaTypeAdapter(NameAdapter.class)
String name;
}