RestTemplate使用总结
来源:互联网 发布:ubuntu安装中文字体 编辑:程序博客网 时间:2024/06/03 16:57
RestTemplate的介绍就不说了,总的来说用这个对象可以很方便的模拟一个http请求。
Talk is cheap,Show me the code,
使用的是springboot整合的工程所以以下涉及到的对象都是注解式的声明和注入,
一、声明restTemplate对象
@Bean public RestTemplate getRestTemplate() { RestTemplate restTemplate = new RestTemplate( getClientHttpRequestFactory()); return restTemplate; } @Bean public ClientHttpRequestFactory getClientHttpRequestFactory() { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory( getHttpClient()); factory.setConnectTimeout(3000); factory.setReadTimeout(5000); return factory; } @Bean public ClientHttpRequestFactory getClientHttpRequestFactory() { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory( getHttpClient()); factory.setConnectTimeout(3000); factory.setReadTimeout(5000); return factory; } @Bean public HttpClient getHttpClient() { final ConnectionKeepAliveStrategy myStrategy = new ConnectionKeepAliveStrategy() { public long getKeepAliveDuration(HttpResponse response, HttpContext context) { return 5 * 1000;//设置一个链接的最大存活时间 } }; return HttpClientBuilder.create().setConnectionManager(getManager()) .setKeepAliveStrategy(myStrategy).build(); }
当然,可以利用注解@Bean的name属性指定实例化对象的name,注入的时候使用@Qualifier("Name of restTemplate")指定name即可。在平常使用中如果不想启动spring的ioc,并且想简单使用restTemplate 可以直接使用new,但是要注意使用中发出去一个请求之后有可能链接断了之后那么程序会永远的阻塞在那了,切记。
RestTemplate restTemplate = new RestTemplate();
在使用中要在适合的时机去清空超时或者空白的链接
@Autowired private PoolingHttpClientConnectionManager manager; ............... connectionManager.closeExpiredConnections(); connectionManager.closeIdleConnections(10, TimeUnit.SECONDS);
下面展示header的设置以及一个完整的交互过程
public String getPolicyJson(String policyNo){ HttpHeaders httpHeaders = new HttpHeaders(); //设置header httpHeaders.add("Content-Type", "application/json; charset=UTF-8"); Map<String, String> hashmap = new LinkedHashMap<String, String>(); int random = RandomUtils.nextInt(0, 100000); hashmap.put("random", random+""); hashmap.put("orderNo", policyNo); hashmap.put("requestSource",""); HttpEntity<Map<String, String>> requestEntity = new HttpEntity<Map<String, String>>( hashmap, httpHeaders); ResponseEntity<String> resp = restTemplate.exchange(queryUrlJson ,HttpMethod.POST,requestEntity, String.class); //获取返回的header List<String> val = resp.getHeaders().get("Set-Cookie"); String body = resp.getBody(); return body; }
上面代码的hashmap一个字段只能传输一个值,可以使用org.springframework.util.LinkedMultiValueMap.LinkedMultiValueMap<String,String>()这个类的对象传输,一般情况下是与上述代码的结果一样的restTemplate有许多get和post开头的方法,可以都试试啊说不定就遇到了个最喜欢的了,
附,
如果返回结果是html,可以使用Jsoup的Document 进行解析
0 0
- RestTemplate使用总结
- RestTemplate使用总结
- RestTemplate使用
- RestTemplate使用
- HttpMessageConverter和resttemplate总结
- RestTemplate上传文件总结
- Spring RestTemplate 用法总结
- 使用Spring RestTemplate测试
- 使用RestTemplate进行测试
- spring RestTemplate使用
- RestTemplate使用小结
- springboot中使用RestTemplate
- 如何使用 Spring RestTemplate
- 使用RestTemplate上传文件
- Springboot 使用 RestTemplate
- RestTemplate访问Rest服务总结
- RestTemplate
- RestTemplate
- bash 提示
- Google推荐的图片加载库Glide介绍
- AndroidStudio的用法详解
- Android 自定义View (一)
- scala Manifest、ClassTag、TypeTag的学习
- RestTemplate使用总结
- hdu 2544 最短路
- 73条日常Linux shell命令汇总
- python中单,双引号和三个双引号的区别
- Android基于特征码查杀手机病毒
- 椭圆人头跟踪bmp图像序列 BMP Image Sequences for Elliptical Head Tracking
- 动态规划1003
- [转]Berkeley DB实现分析
- 拼装网页路径