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