Java Spring引导XML更改根元素名称
我编写了一个spring引导应用程序来接受Http get请求并发送一个XML响应作为输出Java Spring引导XML更改根元素名称,java,xml,spring,spring-boot,jackson-dataformat-xml,Java,Xml,Spring,Spring Boot,Jackson Dataformat Xml,我编写了一个spring引导应用程序来接受Http get请求并发送一个XML响应作为输出 <response xmlns=""> <userId>235</userId> <amount>345.0</amount> </response> 但是我得到了如下的响应作为输出 <CgPayment xmlns=""> <userId>235</userId>
<response xmlns="">
<userId>235</userId>
<amount>345.0</amount>
</response>
但是我得到了如下的响应作为输出
<CgPayment xmlns="">
<userId>235</userId>
<amount>345.0</amount>
</CgPayment>
235
345
如何更改根元素。响应类型为APPLICATION\u XML\u VALUE是否尝试将类名更改为response??我认为你们的封送员是从班级的名字中得到名字的 我发现了这个(也许会有帮助) 如果type()是JAXBElement.class,则namespace()和name()指向 使用XmlElementDecl的工厂方法。XML元素名称是 工厂方法的XmlElementDecl注释中的元素名称,或者如果 来自其替换群的元素(它是其中的头元素) 已在XML文档中替换,则元素名称为 如果type()不是 类,那么XML元素名就是XML元素名 使用注释与类型静态关联 类型上的XmlRootElement。如果类型未使用 XmlElementDecl,那么这是一个错误。如果type()不是 类,则此值必须为“”
您使用的是特定于JAXB的注释,但Jackson需要整理您的响应。要使JAXB注释与Jackson一起工作,您必须在
pom.xml
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
</dependency>
或
您可以在类级别使用
@JacksonXmlRootElement(localName=“response”)
Javadoc:试试
@JacksonXmlRootElement
。或者将name
属性设置为Response
的xmlement
注释可以实现此目的。请看:我需要的是作为根节点名称的响应(起始字母很简单)。我已经改变了我的问题。谢谢。这应该是公认的答案。spring默认使用jackson,因此需要安装JaxbAnnotationModule
来使用JAXB注释。从2.9.0
开始,额外的依赖性也不再是必需的。这对我来说很有效,我在SpringBoot应用程序中添加了Bean依赖性
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
</dependency>
@Component
public class JacksonCustomizer implements Jackson2ObjectMapperBuilderCustomizer {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.modulesToInstall(new JaxbAnnotationModule());
}
@Bean
Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
return (mapperBuilder) -> mapperBuilder.modulesToInstall(new JaxbAnnotationModule());
}