【WEB系列】xml传参与返回使用姿势

栏目: IT技术 · 发布时间: 4年前

内容简介:使用XML作为传参和返回结果,在实际的编码中可能不太常见,特别是当前json大行其道的时候;那么为什么突然来这么一出呢?源于对接微信公众号的消息接收,自动回复的开发时,惊奇的发现微信使用xml格式进行交互,所以也就不得不支持了下面介绍一下SpringBoot中如何支持xml传参解析与返回xml文档本文创建的实例工程采用

使用XML作为传参和返回结果,在实际的编码中可能不太常见,特别是当前json大行其道的时候;那么为什么突然来这么一出呢?源于对接微信公众号的消息接收,自动回复的开发时,惊奇的发现微信使用xml格式进行交互,所以也就不得不支持了

下面介绍一下SpringBoot中如何支持xml传参解析与返回xml文档

I. 项目环境

本文创建的实例工程采用 SpringBoot 2.2.1.RELEASE + maven 3.5.3 + idea 进行开发

1. pom依赖

具体的SpringBoot项目工程创建就不赘述了,对于pom文件中,需要重点关注下面两个依赖类

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.10.0</version>
    </dependency>
</dependencies>

请注意jackson-dataformat-xml版本,不要选择太老的

II. 实例演示

1. 传参Bean

定义一个接受参数的bean对象,如下

@JacksonXmlRootElement(localName = "req")
@Data
public static class XmlBean {
    private String name;
    
    @JacksonXmlProperty(localName = "age")
    private Integer age;
}

请注意,我们使用 @JacksonXmlRootElement 注解来修饰这个bean,localName中的value,相当于xml的根标签;如果类中的属性成员名,和xml标签名不一样,可以使用注解 @JacksonXmlProperty(localName = "xxx") 来修饰

其次,请保留bean的默认无参构造函数,get/set方法 (我上面为了简洁,使用了lombok(最近看到了不少抨击lombok的文章…),不希望使用lombok的小伙伴,可以利用IDEA的自动生成,来实现相关的代码)

2. Response Bean

定义返回的也是一个xml bean

@Data
@JacksonXmlRootElement(localName = "res")
public static class XmlRes {
    private String msg;

    private Integer code;

    private String data;
}

3. rest服务

然后像平常一样,实现一个”普通”的rest服务即可

@RestController
@RequestMapping(path = "xml")
public class XmlParamsRest {
    @PostMapping(path = "show", consumes = {MediaType.APPLICATION_XML_VALUE},
            produces = MediaType.APPLICATION_XML_VALUE)
    public XmlRes show(@RequestBody XmlBean bean) {
        System.out.println(bean);
        XmlRes res = new XmlRes();
        res.setCode(0);
        res.setMsg("success");
        res.setData(bean.toString());
        return res;
    }
}

注意三点

  • @RestController :返回的不是视图
  • @PostMapping 注解中的 consumesproduces 参数,指定了”application/xml”,表示我们接收和返回的都是xml文档
  • @RequestBody :不加这个注解时,无法获取传参哦(可以想一想why?)

接口测试

我个人倾向于万能的curl进行测试,打开终端即可使用,如下

# 测试命令
curl -X POST 'http://127.0.0.1:8080/xml/show' -H 'content-type:application/xml' -d '<req><name>一灰灰</name><age>18</age></req>' -i

【WEB系列】xml传参与返回使用姿势

考虑到有些小伙伴更青睐于Postman进行url测试,下面是具体的请求姿势

【WEB系列】xml传参与返回使用姿势

4. 解析异常问题

如果需要重新这个问题,可以参考项目: https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/202-web-params

某些场景下,直接使用上面的姿势貌似不能正常工作,会抛出一个 Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/xml;charset=UTF-8' not supported] 的异常信息

针对出现 HttpMediaTypeNotSupportedException 的场景,解决办法也很明确,增加一个xml的 HttpMesssageConverter 即可,依然是借助 MappingJackson2XmlHttpMessageConverter ,如

@Configuration
public class MvcConfig extends WebMvcConfigurationSupport {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        converters.add(new MappingJackson2XmlHttpMessageConverter());
    }
}

II. 其他

0. 项目

1. 一灰灰Blog

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

【WEB系列】xml传参与返回使用姿势

打赏 如果觉得我的文章对您有帮助,请随意打赏。


以上所述就是小编给大家介绍的《【WEB系列】xml传参与返回使用姿势》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

生物信息学算法导论

生物信息学算法导论

N.C.琼斯 / 第1版 (2007年7月1日) / 2007-7 / 45.0

这是一本关于生物信息学算法和计算思想的导论性教科书,原著由国际上的权威学者撰写,经国内知名专家精心翻译为中文,系统介绍推动生物信息学不断进步的算法原理。全书强调的是算法中思想的运用,而不是对表面上并不相关的各类问题进行简单的堆砌。 体现了以下特色: 阐述生物学中的相关问题,涉及对问题的模型化处理并提供一种或多种解决方案: 简要介绍生物信息学领域领军人物; 饶有趣味的小插图使得概念更加具体和形象,方......一起来看看 《生物信息学算法导论》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换