restTemplate.postForObject兩個(gè)方法
1、restTemplate.postForObject(url, null, String.class, params);
Example:
UriTemplate template = new UriTemplate("/hotels/{hotel}/bookings/{booking}");
MapuriVariables = new HashMap();
uriVariables.put("booking", "42");
uriVariables.put("hotel", "1");
System.out.println(template.expand(uriVariables));
will print:
/hotels/1/bookings/42
2、postForObject(URI url, Object request, ClassresponseType)
url中不用加參數
Create a new resource by POSTing the given object to the URL, and returns the representation found in the response.
The request parameter can be a HttpEntity in order to add additional HTTP headers to the request.
RestTemplate,是spring中方便使用rest資源的一個(gè)對象,交互訪(fǎng)問(wèn)的資源通過(guò)URL進(jìn)行識別和定位,每次調用都使用模板方法的設計模式,模板方法依賴(lài)于具體接口的調用,從而實(shí)現了資源的交互和調用;
它的交互方法有30多種,大多數都是基于HTTP的方法,比如:delete()、getForEntity()、getForObject()、put()、headForHeaders()等;
Feign,一個(gè)聲明式的偽HTTP客戶(hù)端,使得編寫(xiě)HTTP客戶(hù)端更加容易;
它只需要創(chuàng )建一個(gè)接口,并且使用注解的方式去配置,即可完成對服務(wù)提供方的接口綁定,大大簡(jiǎn)化了代碼的開(kāi)發(fā)量;
同時(shí),它還具有可拔插的注解特性,而且支持feign自定義的注解和springMvc的注解(默認);
spring rest mvc使用RestTemplate遠程接口調用
主要代碼如下:
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.client.RestTemplate;
參數直接放在URL中 String message =restTemplate.getForObjectocalhost:8080/yongbarservice/appstore/appgoods/restTemplate?name=zhaoshijie&id=80",Str參數使用MAP傳遞
Map<String ,Object> urlVariables = new HashMap<String,Object>();
urlVariables.put("name", "zhaoshijie");
urlVariables.put("id", 80);
String message2restTemplate.getForObject
delete方法沒(méi)有返回值,說(shuō)明,id=0這個(gè)參數在服務(wù)器端可以不定義該參數,直接使用request獲取
restTemplate.putyongbarservice/appstore/appgoods/restTemplate?name=zhaoshijie&id=80",null);
System.out.println(message);
System.out.println(message2);
System.out.println(message3); }
@RestController
public class TestController
{
@RequestMapping(value = "testPost", method = RequestMethod.POST)
public ResponseBean testPost(@RequestBody RequestBean requestBean)
{
ResponseBean responseBean = new ResponseBean();
responseBean.setRetCode("0000");
responseBean.setRetMsg("succ");
return responseBean;
}
}
使用RestTemplate訪(fǎng)問(wèn)該服務(wù)
//請求地址
String url = "http://localhost:8080/testPost";
//入參
RequestBean requestBean = new RequestBean();
requestBean.setTest1("1");
requestBean.setTest2("2");
requestBean.setTest3("3");
RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);
Feign是一個(gè)聲明式的REST客戶(hù)端,通過(guò)Feign我們只需要定義服務(wù)綁定接口,以申明式的方法,優(yōu)雅而簡(jiǎn)單的實(shí)現了服務(wù)調用。
雖然RestTemplate已經(jīng)可以將請求攔截來(lái)實(shí)現對依賴(lài)服務(wù)的接口調用,并對Http請求進(jìn)行封裝處理,形成一套模板化的調用方法,但是對服務(wù)依賴(lài)的調用可能不只一處,一個(gè)接口都會(huì )被多次調用,所以我們會(huì )像前面那樣針對各個(gè)微服務(wù)字形封裝一些客戶(hù)端接口調用類(lèi)來(lái)包裝這些依賴(lài)服務(wù)的調用。
由于RestTemplate的封裝,幾乎每一個(gè)調用都是簡(jiǎn)單的模板化內容,Feign在此基礎上做了進(jìn)一步的封裝,由它來(lái)幫助我們定義和實(shí)現依賴(lài)服務(wù)接口的定義。
在服務(wù)消費者創(chuàng )建服務(wù)調用接口,通過(guò)@FeignClient注解指定服務(wù)名來(lái)綁定服務(wù),然后再使用SpringMVC的注解來(lái)綁定具體該服務(wù)提供的REST接口。
希望能幫到你
1. Activiti REST模塊介紹
關(guān)于Rest的介紹就免除了,主要介紹一下Activiti Rest模塊的功能以及如何使用。
1.1 使用REST的好處
簡(jiǎn)單化:利用現有模塊(activiti-rest.war)代替直接API調用
標準化:各個(gè)系統根據rest模塊的接口規范訪(fǎng)問(wèn)REST資源,統一處理;對于工作流平臺來(lái)說(shuō)此特性尤為突出
擴展性:如果官方提供的REST接口還不能滿(mǎn)足可以繼續在其基礎上進(jìn)行擴展以滿(mǎn)足業(yè)務(wù)系統(平臺)的需求
1.2 不適合使用REST的場(chǎng)景
業(yè)務(wù)數據與流程數據分離:就像kft-activiti-demo中普通表單的演示一樣,業(yè)務(wù)數據保存在一張單獨設計的表中,而不是把表單數據保存在引擎的變量表中,所以對于這樣的場(chǎng)景中需要聯(lián)合事務(wù)管理的就不能使用REST了,例如:?jiǎn)?dòng)流程、任務(wù)完成、業(yè)務(wù)與流程數據聯(lián)合查詢(xún)。
1.3 部署Rest模塊
從5.11版本開(kāi)始不再使用ant腳本的方式啟動(dòng)demo,并且把activiti-explorer和activiti-rest分離并分別提供一個(gè)war包,在wars目錄可以找到它。
把activiti-rest.war解壓到Web服務(wù)器的應用部署目錄(例如tomcat的webapps),根據實(shí)際需求修改activiti-rest/WEB-INF/classes/db.properties里面的數據庫配置后啟動(dòng)應用。
可以通過(guò)REST工具測試是否部署成功可以正常的提供服務(wù),例如Chrome的插件REST
Console,或者通過(guò)Spring MVC提供的RestTemplate。
情況一:由于nginx默認的fastcgi進(jìn)程響應緩沖區太小造成
這種情況下導致fastcgi進(jìn)程被掛起,如果fastcgi服務(wù)隊這個(gè)掛起處理不是很好的話(huà),就可能提示“504 Gateway Time-out”錯誤。
解決辦法:
默認的fastcgi進(jìn)程響應的緩沖區是8K,我們可以設置大一點(diǎn),在nginx.conf里,加入:fastcgi_buffers 8 128k
這表示設置fastcgi緩沖區為8塊128k大小的空間。
解決辦法(改進(jìn)):
在上述方法修改后,如果還是出現問(wèn)題,我們可以繼續修改nginx的超時(shí)參數,將參數調大一點(diǎn),如設置為60秒:
send_timeout 60;
經(jīng)過(guò)這兩個(gè)參數的調整,結果沒(méi)有再提示“504 Gateway Time-out”錯誤,說(shuō)明效果還是挺不錯的,問(wèn)題基本解決。
情況二:PHP環(huán)境的配置問(wèn)題
這里我們需要對php-fpm和nginx進(jìn)行配置修改。因為這種情況下,也會(huì )出現“504 Gateway Time-out”錯誤提示。
解決辦法( php-fpm配置修改):
將max_children由之前的10改為30,這樣操作是為了保證有充足的php-cgi進(jìn)程可以被使用。
將request_terminate_timeout由之前的0秒改成60秒,這樣使php-cgi進(jìn)程處理腳本的超時(shí)時(shí)間提高到60秒,可以防止進(jìn)程被掛起以提高利用效率。
解決辦法(nginx配置修改):
為了減少fastcgi的請求次數,盡量維持buffers不變,我們要更改nginx的幾個(gè)配置項,如下:
將fastcgi_buffers由4 64k改為2 256k;
將fastcgi_buffer_size 由64k改為128k;
將fastcgi_busy_buffers_size由128k改為256k;
將fastcgi_temp_file_write_size由128k改成256k。
解決辦法修改完,我們需要重新加載php-fpm和nginx的配置,然后再進(jìn)行測試。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.930秒