使用下面的简化示例:
正如预期的那样,我得到以下信息:
{"person":{"name":"john","tags":["tag1","tag2"]}}
但是,如果我只设置一个标签,我会得到:
{"person":{"name":"john","tags":"tag1"}}
我期待得到这个:
{"person":{"name":"john","tags":["tag1"]}}
也就是说,jettison 已经移除了标签的数组,因为数组中只有一个元素。
我认为这是非常不安全的。
即使只有一个元素,如何强制放弃写一个数组?
注意:我知道还有其他替代方案可以替代抛弃,例如 StAXON。但是,我在这里问如何使用 Jettison 来实现这一点。请不要建议抛弃其他替代方案。
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.*;
import java.io.*;
import javax.xml.bind.*;
import javax.xml.stream.XMLStreamWriter;
import org.codehaus.jettison.mapped.*;
public class JettisonTest {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Person.class);
Person person = new Person();
person.name = "john";
person.tags.add("tag1");
person.tags.add("tag2");
Configuration config = new Configuration();
MappedNamespaceConvention con = new MappedNamespaceConvention(config);
Writer writer = new OutputStreamWriter(System.out);
XMLStreamWriter xmlStreamWriter = new MappedXMLStreamWriter(con, writer);
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(person, xmlStreamWriter);
}
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Person {
String name;
List<String> tags = new ArrayList<String>();
}