最近做mina相關(guān)的項(xiàng)目,服務(wù)端使用mina作為中轉(zhuǎn)服務(wù)器,需要將設(shè)備端發(fā)起的tcp請(qǐng)求中轉(zhuǎn)到后端HttpServer,此時(shí)mina端相對(duì)于后端HttpServer是一個(gè)Httpclient,參閱前輩們寫(xiě)的代碼,大致了解其使用的技術(shù)。
? ?項(xiàng)目中使用的實(shí)際上是使用Spring框架中的RestTemplate,使用比較簡(jiǎn)單,先聲明實(shí)例化再調(diào)用對(duì)應(yīng)接口。具體如下:
????RestTemplate的聲明:
??? 1、RestTemplate會(huì)在String啟動(dòng)時(shí)注冊(cè)成bean所以第一種方式是直接注入獲取RestTemplate對(duì)象。
如:
@Autowired
RestTemplate restTemplate;
? ? 2、 RestTemplate提供了無(wú)參構(gòu)造方法,可以直接new。
? ? ?如:RestTemplate template = new RestTemplate();
????RestTemplate的使用:
????由于RestTemplate類(lèi)的主要方法使用都大同小異,這里僅拿postForObject方法進(jìn)行舉例。
postForObject方法是進(jìn)行一次post請(qǐng)求返回一個(gè)任意對(duì)象(Spring會(huì)將返回值自動(dòng)序列化),
postForObject方法有3個(gè)及3個(gè)以上參數(shù),但僅使用3個(gè)參數(shù)已經(jīng)可以滿(mǎn)足日常需要。
template.posForObject(String url地址,Object ?傳遞參數(shù),Class 返回值映射對(duì)象)
其中
url地址:必須為全限定地址如http://www.baidu.com/,
傳遞參數(shù):必須使用 MultiValueMap對(duì)象(其實(shí)可以使用其他對(duì)象但有些對(duì)象是不會(huì)將參數(shù)請(qǐng)求進(jìn)去比如Map,尚不清楚原理,如果有大神知道還請(qǐng)告知)
MultiValueMap對(duì)象的泛型為<String,List>其他泛型使用都會(huì)報(bào)錯(cuò)。其他使用方式參考Map
返回值映射對(duì)象:可以使用Object,Map,String等,Spring強(qiáng)大的序列化映射機(jī)制會(huì)將返回文件映射成任何可以映射的類(lèi)型
當(dāng)返回文件不能轉(zhuǎn)換為返回值映射對(duì)象時(shí)會(huì)報(bào)序列化異常
返回值:返回值類(lèi)型為返回值映射對(duì)象類(lèi)型。
????示例:
String url = webApiBaseUrl + "sendStaffApi/getStaffInfoBySn.shtml?sn="+sn;
Map<String, String> params = new HashMap<>();
HttpHeaders headers = new HttpHeaders();
params.put("sn", sn);
RestTemplate template = new RestTemplate();
ResponseEntity<String> response = template.exchange(url, HttpMethod.POST, new HttpEntity<String>(headers),
String.class, params);
//返回?cái)?shù)據(jù)結(jié)果
String result = response.getBody();