Java JAXB-在生成xml时,我们可以在生成xml之前检查对象的值吗
假设我有一个对象Java JAXB-在生成xml时,我们可以在生成xml之前检查对象的值吗,java,jaxb,Java,Jaxb,假设我有一个对象 @XmlRootElement(name = "publisher") class Person { @XmlElement(required = true) int id; @XmlElement(required = true) String name; } 我想生成一个 <person> <id>1</id> <name>test</name> </person> 1. 测试 假设名称
@XmlRootElement(name = "publisher")
class Person
{
@XmlElement(required = true)
int id;
@XmlElement(required = true)
String name;
}
我想生成一个
<person>
<id>1</id>
<name>test</name>
</person>
1.
测试
假设名称为test10,则我不希望该项出现在xml中。无论如何,要实现这一点。您可以执行以下操作:
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;
}
}
用例#1-不基于名称元素封送Person对象
如果Person是根对象
如果Person
是根对象,那么您可以按照对此问题的评论中的建议执行以下操作
if (!"test10".equals(person.getName()) {
marshaller.marshal(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;
}
}
您的人员
类将如下所示:
@XmlRootElement(name = "publisher")
class Person
{
@XmlElement(required = true)
int id;
@XmlElement(required = true)
@XmlJavaTypeAdapter(NameAdapter.class)
String name;
}
如果(!“test10.equals(person.getName()){marshaller.marshall(person);}。我遗漏了什么吗?你想只跳过name元素还是完整的person/publisher?+1。我学到了一些新的东西。最后一个适配器与name是必需的这一事实是否冲突?使用它会导致无效的XML,不是吗?@JBNizet-谢谢你的支持。最后一个适配器允许你生成正确的XML对将从注释类生成的XML架构无效的文档。这是否是一个问题取决于用户应用程序。许多人不执行架构验证,并且将XML架构视为一个指导原则,而不是一组严格的规则。