SpringBoot接收與響應xml報文請求的實現(xiàn)
背景
平時開發(fā)的接口,基本是使用 json 格式的請求報文。然而,有時候也避免不了有 xml 報文請求的場景,最近就遇到了這種情況,在此記錄下。另外,工程中使用的是 controller-service……這種結構。
xml請求報文:
<?xml?version="1.0"?encoding="UTF-8"??> <req> ??<tel>15556905765</tel> ??<activityid></activityid> ??<timestamp>1603383430</timestamp> </req>
xml響應報文:
<?xml?version="1.0"?encoding="UTF-8"??> <resp> ????<code>200</code> ????<msg></msg> ????<activeflag></activeflag> </resp>
實現(xiàn)步驟
第一步,引入必需依賴
<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。當定義請求或響應類時,使用 @JacksonXml 開頭的注解,可以實現(xiàn) xml 標簽字段與 javabean 字段之間的映射。
第二步,自定義請求類和響應類
自定義請求類:
@Data @JacksonXmlRootElement(localName = "req") public class TestRequest { //手機號 @JacksonXmlProperty(localName = "tel") private String tel; //活動商品ID @JacksonXmlProperty(localName = "activityId") private String productId; @JacksonXmlProperty(localName = "timestamp") private Long timestamp; }
自定義響應類:
@Data @JacksonXmlRootElement(localName = "resp") public class TestResponse { //返回碼 @JacksonXmlProperty(localName = "code") private String code; //返回碼信息描述 @JacksonXmlProperty(localName = "msg") private String msg; //可參與活動標志 :1-可參與 2-不可參與 @JacksonXmlProperty(localName = "activeflag") private String activeFlag; }
注意,當xml與實體類的一些字段名稱相同時,這些字段可以不使用@JacksonXmlProperty注解。
第三步,編寫控制器類和業(yè)務邏輯
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?.... 省略 //正常情況 TestResponse response = new TestResponse(); response.setCode("200"); response.setMsg("allow sub"); response.setActiveFlag("1"); return javaBeanToXml(response); } }
第四步,編寫 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; }
自測
這里,使用 postman 工具測試(Body->raw->XML)
效果如下:
特此記錄下,就這樣~
總結
到此這篇關于SpringBoot接收與響應xml報文請求的文章就介紹到這了,更多相關SpringBoot接收響應xml報文請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解java集成支付寶支付接口(JSP+支付寶20160912)
本篇文章主要介紹了java集成支付寶支付接口,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12java連接SQL Server數(shù)據(jù)庫的方法
這篇文章主要為大家詳細介紹了java連接SQL Server數(shù)據(jù)庫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10SpringBoot使用SOFA-Lookout監(jiān)控的方法
本文介紹SpringBoot使用螞蟻金服SOFA-Lookout配合Prometheus進行監(jiān)控,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03SpringBoot實現(xiàn)excel生成并且通過郵件發(fā)送的步驟詳解
實際開發(fā)中,特別是在B端產(chǎn)品的開發(fā)中,我們經(jīng)常會遇到導出excel的功能,更進階一點的需要我們定期生成統(tǒng)計報表,然后通過郵箱發(fā)送給指定的人員,?今天要帶大家來實現(xiàn)的就是excel生成并通過郵件發(fā)送,需要的朋友可以參考下2023-10-10Java編程redisson實現(xiàn)分布式鎖代碼示例
這篇文章主要介紹了Java編程redisson實現(xiàn)分布式鎖代碼示例,小編覺得還是比較不錯的,這里給大家分享下,供需要的朋友參考。2017-10-10