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