SpringBoot接收與響應(yīng)xml報(bào)文請(qǐng)求的實(shí)現(xiàn)
背景
平時(shí)開(kāi)發(fā)的接口,基本是使用 json 格式的請(qǐng)求報(bào)文。然而,有時(shí)候也避免不了有 xml 報(bào)文請(qǐng)求的場(chǎng)景,最近就遇到了這種情況,在此記錄下。另外,工程中使用的是 controller-service……這種結(jié)構(gòu)。
xml請(qǐng)求報(bào)文:
<?xml?version="1.0"?encoding="UTF-8"??> <req> ??<tel>15556905765</tel> ??<activityid></activityid> ??<timestamp>1603383430</timestamp> </req>
xml響應(yīng)報(bào)文:
<?xml?version="1.0"?encoding="UTF-8"??> <resp> ????<code>200</code> ????<msg></msg> ????<activeflag></activeflag> </resp>
實(shí)現(xiàn)步驟
第一步,引入必需依賴(lài)
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.14.1</version> </dependency>
在 jackson-dataformat-xml 包里提供了一系列的 json 與 xml 互轉(zhuǎn)的 API。當(dāng)定義請(qǐng)求或響應(yīng)類(lèi)時(shí),使用 @JacksonXml 開(kāi)頭的注解,可以實(shí)現(xiàn) xml 標(biāo)簽字段與 javabean 字段之間的映射。
第二步,自定義請(qǐng)求類(lèi)和響應(yīng)類(lèi)
自定義請(qǐng)求類(lèi):
@Data @JacksonXmlRootElement(localName = "req") public class TestRequest { //手機(jī)號(hào) @JacksonXmlProperty(localName = "tel") private String tel; //活動(dòng)商品ID @JacksonXmlProperty(localName = "activityId") private String productId; @JacksonXmlProperty(localName = "timestamp") private Long timestamp; }
自定義響應(yīng)類(lèi):
@Data @JacksonXmlRootElement(localName = "resp") public class TestResponse { //返回碼 @JacksonXmlProperty(localName = "code") private String code; //返回碼信息描述 @JacksonXmlProperty(localName = "msg") private String msg; //可參與活動(dòng)標(biāo)志 :1-可參與 2-不可參與 @JacksonXmlProperty(localName = "activeflag") private String activeFlag; }
注意,當(dāng)xml與實(shí)體類(lèi)的一些字段名稱(chēng)相同時(shí),這些字段可以不使用@JacksonXmlProperty注解。
第三步,編寫(xiě)控制器類(lèi)和業(yè)務(wù)邏輯
TestController:
@RestController public class TestController { @Resource private TestService testService; @PostMapping(value = "/test" , produces = MediaType.APPLICATION_XML_VALUE) public String test(@RequestBody TestRequest request) { return testService.service(request); } }
TestService:
@Slf4j @Service public class TestService { public String service(TestRequest request){ //request入?yún)⑿r?yàn) .... 省略 //正常情況 TestResponse response = new TestResponse(); response.setCode("200"); response.setMsg("allow sub"); response.setActiveFlag("1"); return javaBeanToXml(response); } }
第四步,編寫(xiě) javabean 轉(zhuǎn) xml 方法
//XML文件頭 private static final String XML_HEAD = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; public static String javaBeanToXml(Object obj) { String xml = ""; if (Objects.isNull(obj)) { return xml; } try { XmlMapper xmlMapper = new XmlMapper(); xml = xmlMapper.writeValueAsString(obj); } catch (Exception e) { log.error("javaBeanToXml error, obj={}, xml={}", obj, xml, e); return ""; } // 添加xml文件頭 return XML_HEAD + xml; }
自測(cè)
這里,使用 postman 工具測(cè)試(Body->raw->XML)
效果如下:
特此記錄下,就這樣~
總結(jié)
到此這篇關(guān)于SpringBoot接收與響應(yīng)xml報(bào)文請(qǐng)求的文章就介紹到這了,更多相關(guān)SpringBoot接收響應(yīng)xml報(bào)文請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請(qǐng)求客戶(hù)端的實(shí)現(xiàn)
- springboot如何實(shí)現(xiàn)異步響應(yīng)請(qǐng)求(前端請(qǐng)求超時(shí)的問(wèn)題解決)
- SpringBoot請(qǐng)求發(fā)送與信息響應(yīng)匹配實(shí)現(xiàn)方法介紹
- springboot vue完成發(fā)送接口請(qǐng)求顯示響應(yīng)頭信息
- SpringBoot之自定義Filter獲取請(qǐng)求參數(shù)與響應(yīng)結(jié)果案例詳解
- SpringBoot請(qǐng)求響應(yīng)方式示例詳解
相關(guān)文章
淺談Java日志框架slf4j作用及其實(shí)現(xiàn)原理
日志記錄是應(yīng)用程序運(yùn)行中必不可少的一部分。這篇文章主要介紹了淺談Java日志框架slf4j作用及其實(shí)現(xiàn)原理,SLF4J是一個(gè)日志框架抽象層,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03詳解java集成支付寶支付接口(JSP+支付寶20160912)
本篇文章主要介紹了java集成支付寶支付接口,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12java連接SQL Server數(shù)據(jù)庫(kù)的方法
這篇文章主要為大家詳細(xì)介紹了java連接SQL Server數(shù)據(jù)庫(kù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Gradle相對(duì)于Maven有哪些優(yōu)點(diǎn)
這篇文章主要介紹了Gradle相對(duì)于Maven有哪些優(yōu)點(diǎn),幫助大家選擇合適的自動(dòng)構(gòu)建工具,更好的構(gòu)建項(xiàng)目,感興趣的朋友可以了解下2020-10-10SpringBoot使用SOFA-Lookout監(jiān)控的方法
本文介紹SpringBoot使用螞蟻金服SOFA-Lookout配合Prometheus進(jìn)行監(jiān)控,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03SpringBoot實(shí)現(xiàn)excel生成并且通過(guò)郵件發(fā)送的步驟詳解
實(shí)際開(kāi)發(fā)中,特別是在B端產(chǎn)品的開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到導(dǎo)出excel的功能,更進(jìn)階一點(diǎn)的需要我們定期生成統(tǒng)計(jì)報(bào)表,然后通過(guò)郵箱發(fā)送給指定的人員,?今天要帶大家來(lái)實(shí)現(xiàn)的就是excel生成并通過(guò)郵件發(fā)送,需要的朋友可以參考下2023-10-10Java編程redisson實(shí)現(xiàn)分布式鎖代碼示例
這篇文章主要介紹了Java編程redisson實(shí)現(xiàn)分布式鎖代碼示例,小編覺(jué)得還是比較不錯(cuò)的,這里給大家分享下,供需要的朋友參考。2017-10-10