gpt4 book ai didi

java - Jackson 没有大写 XML 元素

转载 作者:行者123 更新时间:2023-11-30 10:00:34 25 4
gpt4 key购买 nike

假设我有以下 XML 模型:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"person",
"user"
})
@XmlRootElement(name = "CUSTOMER")
public class CUSTOMER {
@XmlElement(name = "PERSON", required = true)
protected CUSTOMER.PERSON person;
@XmlElement(name = "USER", required = true)
protected CUSTOMER.USER user;
....
....

如果我按照约定将类重命名为:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"person",
"user"
})
@XmlRootElement(name = "CUSTOMER")
public class Customer {
....

两个元素都像:

    @XmlElement(name = "PERSON", required = true)
protected CUSTOMER.PERSON person;
@XmlElement(name = "USER", required = true)
protected CUSTOMER.USER user;
....

XML 来自

new XmlMapper().writerWithDefaultPrettyPrinter().writeValueAsString(customer)) 

看起来像这样:

<Customer>
<id>id</id>
...
<person>
<id>id</id>
...
</person>
<user>
<id>id</id>
...
</user>
</Customer>

但我希望它看起来像这样:

<CUSTOMER>
<id>id</id>
...
<PERSON>
<id>id</id>
...
</PERSON>
<USER>
<id>id</id>
...
</USER>
</CUSTOMER>

我做错了什么吗?我看到我可以使用 @JsonProperty 并且它有效,但仅适用于字段,我觉得在 XML 元素上使用 JsonProperty 是错误的。可以将我的模型类命名为 CUSTOMER、PERSON、USER 还是我应该重命名它们,如果重命名它们更好,我应该使用 JsonProperty 吗? RootElement 呢?

最佳答案

看起来 Jackson 没有解析 JAXB 注释。要修复它,您可以使用注释内省(introspection)器,例如 JaxbAnnotationIntrospector :

XmlMapper mapper = new XmlMapper();
mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(mapper.getTypeFactory()));

String xml = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(costumer);

同时检查 JaxbAnnotationIntrospector文档,因为存在一些限制。


如果出于某种原因,您打算直接使用 JAXB,正如您在评论中提到的那样,您将拥有类似的东西:

JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

StringWriter writer = new StringWriter();
marshaller.marshal(customer, writer);

String xml = writer.toString();

请记住,JAXBContext 应该创建一次然后重复使用,正如 answer 中指出的那样.

关于java - Jackson 没有大写 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57905456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com