是否可以让Jackson ObjectMapper在Spring Boot应用程序中遵守JAXB XML注释()

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述是否可以让Jackson ObjectMapper在Spring Boot应用程序中遵守JAXB XML注释?相关的知识,希望能为你提供帮助。
使用spring-boot jackson进行ObjectMapper应用程序我使用以下模式将List字段序列化得很好:

@JacksonXmlProperty(localName = "item") @JacksonXmlElementWrapper(useWrapping = true, localName = "items") private List< Item> items;

所以得到类似的东西:
< items> < item> ...< /item> < item> ...< /item> ... < /items>

【是否可以让Jackson ObjectMapper在Spring Boot应用程序中遵守JAXB XML注释()】我已经研究过 - 没有任何运气 - 如何使用像jaxb这样的@XmlElementWrapper注释来实现这一目标。
有没有 - 例如 - 我可以用JacksonConfiguration做些什么?
UPDATE
添加
objectMapper.registerModule(new JaxbAnnotationModule());

到Spring Jackson配置和注释如:
@XmlElementWrapper @XmlElement(name="item") private List< Item> items;

没有按预期工作。我目前正在研究用this post在GSON取代杰克逊的可能性
我真的希望这个注释的东西是通用的,所以不仅仅是jackson特定的,或者像每个序列化器实现添加注释一样。
答案我没有尝试过jackson-dataformat-xml / JaxbAnnotationModule,我不确定它是否与spring-boot兼容(如果是的话你应该回复),但值得测试一下。
更新:
在这里你是一个测试(使用上面的链接)
import java.io.IOException; import java.io.StringWriter; import java.util.Arrays; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule; public class TestJacksonWithJaxbAnnot {static ObjectMapper objectMapper = new ObjectMapper(); static{ objectMapper.registerModule(new JaxbAnnotationModule()); }@XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "item") static class Item { @XmlElement int id; @XmlElement String name; //getters, setters, etc. }@XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "itemcollection") static class ItemCollection { @XmlElement String nameOfItems; @XmlElement List< Item> items; //getters, setters, etc. }public static void main(String[] args) throws XMLStreamException, IOException { ItemCollection testColl = new ItemCollection(); testColl.nameOfItems = "Test items"; Item item1 = new Item(); item1.id = 1; item1.name = "apple"; Item item2 = new Item(); item2.id = 2; item2.name = "orange"; testColl.items = Arrays.asList(item1, item2); StringWriter stringWriter = new StringWriter(); XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance(); XMLStreamWriter sw =xmlOutputFactory.createXMLStreamWriter(stringWriter); XmlMapper mapper = new XmlMapper(); sw.writeStartDocument(); sw.writeStartElement("root"); mapper.writeValue(sw, testColl); sw.writeComment("Some insightful commentary here"); sw.writeEndElement(); sw.writeEndDocument(); System.out.println(stringWriter.toString()); } }

输出:
< ?xml version="1.0" encoding="UTF-8"?> < root> < ItemCollection> < nameOfItems> Test items< /nameOfItems> < items> < items> < id> 1< /id> < name> apple< /name> < /items> < items> < id> 2< /id> < name> orange< /name> < /items> < /items> < /ItemCollection> < !--Some insightful commentary here--> < /root>

如你所见,它并不完美,例如它没有处理@XmlRootElement注释中定义的名称。 (在我的1.5.10.RELEASE spring-boot项目中测试过,其中jackson-dataformat-xml具有2.8.10托管版本)。
也许在以后的版本中你会得到更好的输出。

    推荐阅读