使用XML作为传参和返回结果,在实际的编码中可能不太常见,特别是当前json大行其道的时候;那么为什么突然来这么一出呢?源于对接微信公众号的消息接收,自动回复的开发时,惊奇的发现微信使用xml格式进行交互,所以也就不得不支持了
下面介绍一下SpringBoot中如何支持xml传参解析与返回xml文档
I. 项目环境
本文创建的实例工程采用SpringBoot 2.2.1.RELEASE
+ maven 3.5.3
+ idea
进行开发
1. pom依赖
具体的SpringBoot项目工程创建就不赘述了,对于pom文件中,需要重点关注下面两个依赖类
1 | <dependencies> |
请注意jackson-dataformat-xml版本,不要选择太老的
II. 实例演示
1. 传参Bean
定义一个接受参数的bean对象,如下
1 | "req") (localName = |
请注意,我们使用@JacksonXmlRootElement
注解来修饰这个bean,localName中的value,相当于xml的根标签;如果类中的属性成员名,和xml标签名不一样,可以使用注解@JacksonXmlProperty(localName = "xxx")
来修饰
其次,请保留bean的默认无参构造函数,get/set方法 (我上面为了简洁,使用了lombok(最近看到了不少抨击lombok的文章…),不希望使用lombok的小伙伴,可以利用IDEA的自动生成,来实现相关的代码)
2. Response Bean
定义返回的也是一个xml bean
1 |
|
3. rest服务
然后像平常一样,实现一个”普通”的rest服务即可
1 |
|
注意三点
@RestController
:返回的不是视图@PostMapping
注解中的consumes
和produces
参数,指定了”application/xml”,表示我们接收和返回的都是xml文档@RequestBody
:不加这个注解时,无法获取传参哦(可以想一想why?)
接口测试
我个人倾向于万能的curl进行测试,打开终端即可使用,如下
1 | # 测试命令 |
考虑到有些小伙伴更青睐于Postman进行url测试,下面是具体的请求姿势
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
,如
1 |
|
II. 其他
0. 项目
- 工程:https://github.com/liuyueyi/spring-boot-demo
- 源码:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/202-web-params
1. 一灰灰Blog
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
- 一灰灰Blog个人博客 https://blog.hhui.top
- 一灰灰Blog-Spring专题博客 http://spring.hhui.top
Be the first person to leave a comment!