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架构视为一个指导原则,而不是一组严格的规则。