springboot使用HttpClient接受json引數轉為物件,再將物件轉為json
阿新 • • 發佈:2019-01-30
將json資料轉為物件模型
http://wthrcdn.etouch.cn/weather_mini?city=深圳
上面連結可以請求天氣資料,並返回json:
{ "data": { "yesterday": { "date": "4日星期三", "high": "高溫 32℃", "fx": "無持續風向", "low": "低溫 27℃", "fl": "<![CDATA[<3級]]>", "type": "多雲" }, "city": "深圳", "aqi": "26", "forecast": [ { "date": "5日星期四", "high": "高溫 32℃", "fengli": "<![CDATA[<3級]]>", "low": "低溫 27℃", "fengxiang": "無持續風向", "type": "陣雨" }, { "date": "6日星期五", "high": "高溫 32℃", "fengli": "<![CDATA[<3級]]>", "low": "低溫 28℃", "fengxiang": "無持續風向", "type": "陣雨" }, { "date": "7日星期六", "high": "高溫 33℃", "fengli": "<![CDATA[<3級]]>", "low": "低溫 28℃", "fengxiang": "無持續風向", "type": "陣雨" }, { "date": "8日星期天", "high": "高溫 33℃", "fengli": "<![CDATA[<3級]]>", "low": "低溫 28℃", "fengxiang": "無持續風向", "type": "陣雨" }, { "date": "9日星期一", "high": "高溫 32℃", "fengli": "<![CDATA[<3級]]>", "low": "低溫 28℃", "fengxiang": "無持續風向", "type": "陣雨" } ], "ganmao": "各項氣象條件適宜,發生感冒機率較低。但請避免長期處於空調房間中,以防感冒。", "wendu": "29" }, "status": 1000, "desc": "OK" }
首先建立物件接收json引數。分別在vo包中建立,四個物件。
其中weatherResponse為最頂級物件。
注意:物件屬性名需要和json返回值相同,不然httpclient會解析失敗。
引入httpclient依賴,(lombok可以在物件類上寫@data,免除get、set的書寫)
在實現類中寫轉換邏輯:
@Autowired private RestTemplate restTemplate; //注入httpclient中的主要實現模板類 private static final String WEATHER_URI="http://wthrcdn.etouch.cn/weather_mini?" @Override
public WeatherResponse getDataByCityName(String cityName) { String uri=WEATHER_URI+"city="+cityName; ResponseEntity<String> respString=restTemplate.getForEntity(uri,String.class); //httpclient中不能直接 將json轉換為所需類,先轉換成ResponseEntity ObjectMapper mapper=new ObjectMapper(); //然後使用spring自帶的進行轉換 WeatherResponse resp=null; String strBody=null; if(respString.getStatusCodeValue()==200){ //判斷返回的狀態碼 strBody=respString.getBody(); } try { resp=mapper.readValue(strBody,WeatherResponse.class); }catch (IOException e){ e.printStackTrace(); } return resp; }
然後還需要配置RestTemplate模板類:
最後:在controller中呼叫服務即可
。
至於將物件轉換為json,在controller中返回物件,然後配置@RestController或者@ResponseBody即可自動轉換。,也可以參考我另外一篇關於物件轉換json的部落格。