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中不用加参数
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进行识别和定位,每次调用都使用模板方法的设计模式,模板方法依赖于具体接口的调用,从而实现了资源的交互和调用;
它的交互方法有30多种,大多数都是基于HTTP的方法,比如:delete()、getForEntity()、getForObject()、put()、headForHeaders()等;
Feign,一个声明式的伪HTTP客户端,使得编写HTTP客户端更加容易;
它只需要创建一个接口,并且使用注解的方式去配置,即可完成对服务提供方的接口绑定,大大简化了代码的开发量;
同时,它还具有可拔插的注解特性,而且支持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方法没有返回值,说明,id=0这个参数在服务器端可以不定义该参数,直接使用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";
//入参
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我们只需要定义服务绑定接口,以申明式的方法,优雅而简单的实现了服务调用。
虽然RestTemplate已经可以将请求拦截来实现对依赖服务的接口调用,并对Http请求进行封装处理,形成一套模板化的调用方法,但是对服务依赖的调用可能不只一处,一个接口都会被多次调用,所以我们会像前面那样针对各个微服务字形封装一些客户端接口调用类来包装这些依赖服务的调用。
由于RestTemplate的封装,几乎每一个调用都是简单的模板化内容,Feign在此基础上做了进一步的封装,由它来帮助我们定义和实现依赖服务接口的定义。
在服务消费者创建服务调用接口,通过@FeignClient注解指定服务名来绑定服务,然后再使用SpringMVC的注解来绑定具体该服务提供的REST接口。
希望能帮到你
1. Activiti REST模块介绍
关于Rest的介绍就免除了,主要介绍一下Activiti Rest模块的功能以及如何使用。
1.1 使用REST的好处
简单化:利用现有模块(activiti-rest.war)代替直接API调用
标准化:各个系统根据rest模块的接口规范访问REST资源,统一处理;对于工作流平台来说此特性尤为突出
扩展性:如果官方提供的REST接口还不能满足可以继续在其基础上进行扩展以满足业务系统(平台)的需求
1.2 不适合使用REST的场景
业务数据与流程数据分离:就像kft-activiti-demo中普通表单的演示一样,业务数据保存在一张单独设计的表中,而不是把表单数据保存在引擎的变量表中,所以对于这样的场景中需要联合事务管理的就不能使用REST了,例如:启动流程、任务完成、业务与流程数据联合查询。
1.3 部署Rest模块
从5.11版本开始不再使用ant脚本的方式启动demo,并且把activiti-explorer和activiti-rest分离并分别提供一个war包,在wars目录可以找到它。
把activiti-rest.war解压到Web服务器的应用部署目录(例如tomcat的webapps),根据实际需求修改activiti-rest/WEB-INF/classes/db.properties里面的数据库配置后启动应用。
可以通过REST工具测试是否部署成功可以正常的提供服务,例如Chrome的插件REST
Console,或者通过Spring MVC提供的RestTemplate。
情况一:由于nginx默认的fastcgi进程响应缓冲区太小造成
这种情况下导致fastcgi进程被挂起,如果fastcgi服务队这个挂起处理不是很好的话,就可能提示“504 Gateway Time-out”错误。
解决办法:
默认的fastcgi进程响应的缓冲区是8K,我们可以设置大一点,在nginx.conf里,加入:fastcgi_buffers 8 128k
这表示设置fastcgi缓冲区为8块128k大小的空间。
解决办法(改进):
在上述方法修改后,如果还是出现问题,我们可以继续修改nginx的超时参数,将参数调大一点,如设置为60秒:
send_timeout 60;
经过这两个参数的调整,结果没有再提示“504 Gateway Time-out”错误,说明效果还是挺不错的,问题基本解决。
情况二:PHP环境的配置问题
这里我们需要对php-fpm和nginx进行配置修改。因为这种情况下,也会出现“504 Gateway Time-out”错误提示。
解决办法( php-fpm配置修改):
将max_children由之前的10改为30,这样操作是为了保证有充足的php-cgi进程可以被使用。
将request_terminate_timeout由之前的0秒改成60秒,这样使php-cgi进程处理脚本的超时时间提高到60秒,可以防止进程被挂起以提高利用效率。
解决办法(nginx配置修改):
为了减少fastcgi的请求次数,尽量维持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的配置,然后再进行测试。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.930秒