成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個SpringMVC接口能返回JSON又能返回XML? 安排!

開發(fā) 后端
我們有一個接口服務(wù)為下游的系統(tǒng)提供數(shù)據(jù)服務(wù),本來好好的大家都愉快地傳遞JSON,非常和諧。可最近有個新需求去對接一個很老的系統(tǒng),這倒是不算啥,可這個老系統(tǒng)數(shù)據(jù)不是以JSON傳遞的而是以XML傳遞的。

[[420572]]

我們有一個接口服務(wù)為下游的系統(tǒng)提供數(shù)據(jù)服務(wù),本來好好的大家都愉快地傳遞JSON,非常和諧。可最近有個新需求去對接一個很老的系統(tǒng),這倒是不算啥,可這個老系統(tǒng)數(shù)據(jù)不是以JSON傳遞的而是以XML傳遞的。

同事小王想了個餿主意,把原來的接口原版拷貝一遍統(tǒng)一把返回類型改成XML不就行了?嗯,接口路徑需要占用一套,權(quán)限配置多了一套,還要額外維護一套代碼,這主意太餿了。經(jīng)過大家的研究發(fā)現(xiàn)了Spring MVC的某個機制可以滿足需求。

原理

在HTTP協(xié)議里,當客戶端發(fā)起一個HTTP請求時,可以攜帶一個請求頭Accept來告訴服務(wù)端,客戶端可以接受哪些響應(yīng)類型(MIME),可以是一個也可以是多個。現(xiàn)在前后端分離普遍使用這種:

  1. Accept:application/json 

對于Spring MVC框架來說接受到對應(yīng)的Accept會根據(jù)一定的策略找到對應(yīng)的HttpMessageConverter來處理響應(yīng)數(shù)據(jù)的格式。因此我們只需要找到一個動態(tài)指定Accept的方法就行了。

內(nèi)容協(xié)商

聽起來就很好理解,需要什么內(nèi)容大家協(xié)商,共同解決問題。Spring MVC提供了一種被稱作內(nèi)容協(xié)商的機制,客戶端在請求時聲明需要的MIME類型,服務(wù)端只需要配置一些策略就是實現(xiàn)一個接口返回不同MIME類型的數(shù)據(jù)格式,想要JSON返回JSON,想要XML返回XML。

Spring MVC版本基于Spring MVC 5.3.9。

服務(wù)端配置內(nèi)容協(xié)商

內(nèi)容協(xié)商的配置由Spring MVC中的ContentNegotiationManager負責(zé),我們可以通過ContentNegotiationConfigurer配置它。

首先要在Spring MVC項目中加入Jackson的XML處理庫:

  1. <dependency> 
  2.             <groupId>com.fasterxml.jackson.dataformat</groupId> 
  3.             <artifactId>jackson-dataformat-xml</artifactId> 
  4.         </dependency> 

 

然后配置WebMvcConfigurer中的內(nèi)容協(xié)商配置:

  1. @Configuration 
  2. public class WebConfig implements WebMvcConfigurer { 
  3.     @Override 
  4.     public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 
  5.         configurer.favorParameter(true
  6.                 // 客戶端請求url需要攜帶一個query參數(shù) 默認名稱是 format 
  7.                 .parameterName("format"
  8.                 // 如果不聲明 該query參數(shù) 返回的是json  如果你想指定默認返回類型就需要聲明 
  9.                 // .defaultContentType(MediaType.APPLICATION_XML) 
  10.                 .mediaType("xml", MediaType.APPLICATION_XML) 
  11.                 .mediaType("json", MediaType.APPLICATION_JSON); 
  12.     } 

這樣聲明以后客戶端請求接口中要攜帶一個query參數(shù)(參數(shù)名稱默認為format,你可以修改它)來指定MIME的代號。根據(jù)上面的配置,如果你需要返回JSON:

  1. https://yourapi?format=json 

你也可以不攜帶format參數(shù),因為默認就是JSON,修改默認的MIME類型需要調(diào)用defaultContentType。

如果你需要返回XML:

  1. https://yourapi?format=xml 

服務(wù)端的接口也需要簡單的改造:

  1. @GetMapping(value = "/get",produces = {"application/json","application/xml"}) 
  2. public Map<String, String> doGet(@RequestParam String foo, String bar) { 
  3.  
  4.     Map<String, String> map = new HashMap<>(); 
  5.     map.put("foo", foo); 
  6.     map.put("bar", bar); 
  7.     return map; 

需要根據(jù)配置在@RequestMapping或其簡化注解中聲明對應(yīng)的produce,這一點非常重要。這樣我們改動的地方就非常的少了,能夠適應(yīng)更多的場景,而且維護起來也很簡單。

其它策略

其實Spring MVC的內(nèi)容協(xié)商還可以通過后綴擴展名實現(xiàn),比如/yourapi.json或者/yourapi.xml。還有直接在客戶端請求頭中聲明MIME類型。這些都不太方便操作所以就不介紹了,有興趣可以去看官方文檔。

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)小胖哥」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)小胖哥公眾號。

 

責(zé)任編輯:武曉燕 來源: 碼農(nóng)小胖哥
相關(guān)推薦

2015-02-11 15:06:41

微信SDK

2009-07-23 10:51:20

jQuery調(diào)用Web返回JSON數(shù)據(jù)

2022-06-20 08:37:28

接口tokenAO

2011-05-25 15:34:17

jQueryJSON

2021-07-15 08:58:16

Spring對象引用

2009-09-24 17:09:03

XML設(shè)計器

2021-08-23 15:14:09

Linuxat命令任務(wù)

2019-09-29 10:23:09

APIJava編程語言

2025-03-05 00:00:00

2010-09-09 10:42:30

SQL函數(shù)時間

2025-03-05 07:00:00

渲染state開發(fā)

2024-01-26 11:08:57

C++函數(shù)返回不同類型

2023-06-29 08:43:44

DNS解析IP

2009-12-04 13:50:00

PHP服務(wù)端返回Jso

2010-01-08 09:03:38

返回JSON數(shù)據(jù)

2024-11-25 08:14:09

Gin框架格式

2009-08-26 15:53:42

C#數(shù)據(jù)訪問XML

2022-07-28 09:16:42

JMeter接口

2019-08-02 17:48:16

戴爾

2020-09-22 07:50:23

API接口業(yè)務(wù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产日韩久久 | 亚洲女人天堂成人av在线 | 欧美日韩精品中文字幕 | 精品国产伦一区二区三区观看方式 | 国产精品久久久久久婷婷天堂 | 亚洲一区二区三区在线免费 | 日本一区二区三区四区 | 免费成人在线网站 | 网址黄 | 免费成人av网站 | 免费视频99 | 五月激情六月婷婷 | 日本一卡精品视频免费 | 亚洲福利av | 日日夜夜天天干 | 久久综合九九 | 欧美在线一区二区三区 | 国产黄色大片在线观看 | 天天想天天干 | 狠狠狠| 久久综合九色综合欧美狠狠 | 最新av在线播放 | 日本高清中文字幕 | 99热精品在线观看 | 午夜伦理影院 | 日本黄色一级片视频 | 久久亚洲一区二区三区四区 | 亚洲精品888 | 免费看黄色国产 | 成人国产精品入口免费视频 | 精品亚洲一区二区三区四区五区高 | 免费一级黄色录像 | 91精品国产色综合久久不卡98口 | 日韩在线免费视频 | 精品三级| 日本一区二区三区四区 | 中文视频在线 | 卡通动漫第一页 | 中文字幕乱码一区二区三区 | 久久大陆 | 99精品在线观看 |