1. 程式人生 > >springboot使用HttpClient接受json引數轉為物件,再將物件轉為json

springboot使用HttpClient接受json引數轉為物件,再將物件轉為json

將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的部落格。