Springboot 返回xml数据

业务需求,旧系统提供的webservice服务返回的xml格式数据,改用http协议后,保持返回的数据格式不变;
@RequestMapping , @GetMapping @PostMapping 内部有两个属性定义数据格式

consumes: 定义接口接收的数据格式
produces: 定义接口返回的数据格式

    @ApiOperation("根据医院条形码下载项目结果明细")
    @RequestMapping(value = "getJSONReportItemListByCustomerBarcode", produces = MediaType.APPLICATION_XML_VALUE)
    public ResultResponse<ReportItemListJSONResponse> getJSONReportItemListByCustomerBarcode(@RequestParam String customerBarcode) {
        return ResultResponse.of(quZhouService.getJSONReportItemListByCustomerBarcode(customerBarcode));
    }

不需要任何依赖,springboot默认使用jaxb,只需要熟悉jaxb的注解即可;不过jaxb不支持泛型;

公司项目我选用了jackson的xml解析:
添加依赖:

        <dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-xml</artifactId>
		</dependency>

以上就可以配合jackson xml相关的注解直接使用;
此依赖会注入MappingJackson2XmlHttpMessageConverter 实例进行xml解析;
解析出的xml会缺少xml版本和字符集的声明
解决办法: 覆盖这个注入的bean;

     @Bean
    public MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter() {
        XmlMapper xmlMapper = new XmlMapper();
        XmlMapper.Builder builder = new XmlMapper.Builder(xmlMapper);
        builder.enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION)
                .defaultUseWrapper(false);
        return new MappingJackson2XmlHttpMessageConverter(builder.build());
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,您需要使用JAXB(Java Architecture for XML Binding)来将XML数据绑定到Java对象。 JAXB包含在Java SE中,因此您无需添加任何其他依赖。 您需要创建一个Java类,并根据XML数据中的元素和属性创建字段。然后,使用JAXB注解将字段与XML元素和属性映射。 例如,假设您有以下XML数据: ``` <person> <name>John</name> <age>30</age> </person> ``` 您可以使用以下Java类来表示该XML数据: ``` import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "person") public class Person { private String name; private int age; @XmlElement(name = "name") public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement(name = "age") public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` 然后,您可以使用JAXB的Unmarshaller类将XML数据转换为Java对象: ``` import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; String xml = "<person><name>John</name><age>30</age></person>"; JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Person person = (Person) unmarshaller.unmarshal(new StringReader(xml)); System.out.println(person.getName()); // prints "John" System.out.println(person.getAge()); // prints 30 ``` 此外,您还可以使用JAXB的Marshaller ### 回答2: 使用Java可以用以下方式生成Spring Boot接收XML数据的实体类: 1. 首先,需要解析XML数据。可以使用Java内置的XML解析库,比如DOM或SAX解析器,来解析XML数据。通过解析器,可以将XML数据转换为Java对象。 2. 创建一个Java类来表示XML数据的实体类。这个类应该包含与XML数据中的元素和属性相对应的属性和方法。每个元素和属性都应该有对应的Java字段和setter/getter方法。 3. 在Java类中添加注解来指定XML元素的名称和属性。Spring Boot使用Jackson库来处理XML数据,可以使用Jackson的注解来指定XML元素和属性的名称。 4. 将XML数据解析为Java对象。根据XML数据的结构,可以使用DOM或SAX解析器来遍历XML节点,并将节点的值设置到相应的Java对象中。 5. 使用Java类来接收XML数据。在Spring Boot中,可以使用@RequestParam注解来接收通过POST请求发送的XML数据。在方法参数中,使用Java类来接收XML数据。 6. 使用Java类来处理XML数据。接收到XML数据后,可以通过调用Java类的方法来处理数据,比如解析XML数据,获取元素值,进行逻辑处理等。 7. 返回处理后的结果。根据业务需求,可以将处理后的结果转换为XML格式,并通过Spring Boot的@ResponseBody注解来将结果返回给客户端。 通过以上步骤,就可以使用Java完成根据XML数据生成Spring Boot接收XML数据的实体类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值