java - 如何在jackson xml序列化中使用JAXBElement?

标签 java spring spring-mvc jackson jaxbelement

我使用 xsd2java 从 xsd 自动生成了 java 类。我无法修改 xsd 和 java 类。

问题:在一个类中 List<JAXBElement> 的元素被生成。 如果我现在添加任何 JAXBElementjackson xml 编码器不会显示正确的 xml 元素,但会显示 JAXBElement 的属性连载了。喜欢declaredType , scope等。见下文。

@XmlRootElement(name = "bookingRequest")
public class AutogeneratedReq {
    private List<JAXBElement<?>> someElements;
}

用法:

AutogeneratedReq req = new AutogeneratedReq();
JAXBElement<?> person = new ObjectFactory().createPerson();
req.getSomeElements().add(person);

结果:

<someElements>
    <JAXBElement>
        <name>person</name>
        <declaredType>net.some.company.Person</declaredType>
        <scope>net.some.company</scope><value someattribues="test"/>
        <nil>false</nil>
        <globalScope>false</globalScope>
        <typeSubstituted>false</typeSubstituted>
    </JAXBElement>
</someElements>

问题:我怎么知道jacksonspring-mvc生成正确的 xml,而不是 JAXBElement显式序列化?

最佳答案

我不知道您当前使用哪个 xsd2java 实用程序,但您可以尝试以下 Maven 插件从 XSD 文件生成 Java 类。

https://github.com/highsource/jaxb2-basics/wiki/Using-JAXB2-Basics-Plugins

然后您可以使用以下扩展来创建类型正确的 POJO。

https://github.com/highsource/jaxb2-basics/wiki/JAXB2-Simplify-Plugin

但是,即使您可以创建类型化 POJO 属性,从此 POJO 生成的 XML 文件对于原始 XSD 文件也可能不是 100% 有效。

<小时/>
<jaxb:bindings multiple="true" node="//xs:element[@name='someElement']//xs:complexType//xs:choice//xs:element">
    <simplify:as-element-property/>
</jaxb:bindings>

关于java - 如何在jackson xml序列化中使用JAXBElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47514718/

相关文章:

java - 将 JLabel 设置为 JTextArea 顶部并向下移动 JTextArea

java - 加载特定于环境的属性以与 PropertyPlaceholderConfigurer 一起使用?

java - 使用自动连线文本处理器抛出 HTTPMessageConverter

java - 是否可以在填充 Spring @Value 之前运行验证代码

java - 在 MYSQL 中使用 liquibase 删除外键(如果存在)

java - 如何递归连接字符串元素列表

java - 执行 JPA 一对一时引用的属性未知

spring - 如何将时间值从 Postman 发送到我的 REST api

java - 使用 Spring MVC 在 JSP 页面上显示列表的未解析 EL 表达式

java - 使 ServletContextListener 具有 Spring 意识