【发布时间】:2022-12-10 07:24:00
【问题描述】:
我们有使用 Spring Boot 开发的 RESTful 服务。我们想要返回带有命名空间前缀的 XML 响应。
PersonsController.java
@Controller
@RequestMapping("/persons")
public class PersonsController {
@GetMapping
public @ResponseBody Person getPerson() {
Person person = new Person();
person.setFirstName("Jon");
person.setLastName("Doe");
return person;
}
}
人.java
@NoArgsConstructor
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "person", namespace = "abc.net/")
public class Person {
@XmlElement(namespace = "abc.net/")
private String firstName;
@XmlElement(namespace = "abc.net/")
private String lastName;
}
预期响应:
<?xml version='1.0' encoding='UTF-8'?>
<ns2:person xmlns:ns2="abc.net/">
<ns2:firstName>Jon</firstName>
<ns2:lastName>Doe</lastName>
</ns2:person>
实际响应:
<?xml version='1.0' encoding='UTF-8'?>
<person xmlns="abc.net/">
<firstName>Jon</firstName>
<lastName>Doe</lastName>
</person>
MappingJackson2XmlHttpMessageConverter bean 创建
@Bean
MappingJackson2XmlHttpMessageConverter getMappingJackson2XmlHttpMessageConverter() {
JaxbAnnotationModule jaxbAnnotationModule = new JaxbAnnotationModule();
MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter = new MappingJackson2XmlHttpMessageConverter();
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
mappingJackson2XmlHttpMessageConverter.setObjectMapper(xmlMapper);
mappingJackson2XmlHttpMessageConverter.getObjectMapper().registerModule(jaxbAnnotationModule);
return mappingJackson2XmlHttpMessageConverter;
}
我尝试将 @XmlSchema 放入包级别的 package-info.java 组件中,并带有所需的前缀和命名空间 URI,但没有成功。
我如何配置 Spring Boot XML 编组器以包括在 XML 响应中添加名称空间前缀 - 如上面的预期响应中所述?
我们使用的是 Spring Boot 版本:2.6.6。
【问题讨论】:
标签: xml spring spring-boot jackson-databind jackson-dataformat-xml