我正在编写一个需要使用XML发出POST请求的应用程序。我已经从XSD模式生成了XML类,现在正在尝试用XmlMapper生成上述请求的主体。
我有以下课程:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "header", propOrder = {
"createdOn"
})
public class MessageHeader {
@XmlElement(required = true)
protected MessageCreatedOn createdOn;
...
...
...
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "messageCreatedOn")
public class MessageCreatedOn {
@XmlAttribute(name = "value", required = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar value;
...
...
...
}以及以下XmlMapper配置:
final XmlMapper objectMapper = XmlMapper.builder()
.defaultUseWrapper(false)
.build();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"));
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
String result = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(messageBase);与受抚养人:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.10.3</version>
</dependency>我希望结果是:
<header>
<createdOn value="2021-08-18T14:06:14.493+03:00"/>
</header>但结果是:
<header>
<createdOn>
<value>2021-08-18T14:06:14.493+03:00</value>
</createdOn>
</header>我应该更改什么使value成为createdOn元素的属性。
发布于 2021-08-18 12:20:05
在使用JAXB注释作为元数据时,需要指示Jackson使用这些元数据。否则,它将使用缺省值,用于XML的Jackson注释,或者当不在时,所有东西都将成为一个元素。
要启用JAXB注释处理,请将JaxbAnnotationModule添加到XmlMapper中。这允许Jackson使用JAXB注释来提供映射元数据。
final XmlMapper objectMapper = XmlMapper.builder()
.defaultUseWrapper(false)
.defaultDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"))
.serializationInclusion(JsonInclude.Include.NON_EMPTY)
.addModule(new JaxbAnnotationModule())
.build();而且,理想情况下,您的XmlMapper应该是一个单例bean,而不是每次您需要它时都创建它。另一个注意事项是,如果您使用Spring,您应该真正使用一个RestTemplate,它为您处理(Un)编组。
https://stackoverflow.com/questions/68831792
复制相似问题