Java调用RestFul接口
使用Java调用RestFul接口,以POST请求为例,以下提供几种方法:
一、通过HttpURLConnection调用
1 public String postRequest(String url, String param) {
2 StringBuffer result = new StringBuffer();
3
4 HttpURLConnection conn = null;
5 OutputStream out = null;
6 BufferedReader reader = null;
7 try {
8 URL restUrl = new URL(url);
9 conn = (HttpURLConnection) restUrl.openConnection();
10 conn.setRequestMethod("POST");
11 conn.setDoOutput(true);
12 conn.setDoInput(true);
13
14 conn.setRequestProperty("accept", "*/*");
15 conn.setRequestProperty("connection", "Keep-Alive");
16 conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
17 conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
18
19 conn.connect();
20 out = conn.getOutputStream();
21 out.write(param.getBytes());
22 out.flush();
23
24 int responseCode = conn.getResponseCode();
25 if(responseCode != 200){
26 throw new RuntimeException("Error responseCode:" + responseCode);
27 }
28
29 String output = null;
30 reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
31 while((output=reader.readLine()) != null){
32 result.append(output);
33 }
34 } catch (Exception e) {
35 e.printStackTrace();
36 throw new RuntimeException("调用接口出错:param+"+param);
37 } finally {
38 try {
39 if(reader != null){
40 reader.close();
41 }
42 if(out != null){
43 out.close();
44 }
45 if(conn != null){
46 conn.disconnect();
47 }
48 } catch (Exception e2) {
49 e2.printStackTrace();
50 }
51 }
52
53 return result.toString();
54 }
二、通过Spring提供的RestTemplate模板调用
1 public class RestTemplateUtil {
2
3 @Autowired
4 private RestTemplate restTemplate;
5
6 @Bean
7 public RestTemplate restTemplate(){
8 RestTemplate template = new RestTemplate();
9 // messageConverters是RestTemplate的一个final修饰的List类型的成员变量
10 // messageConverters的第二个元素存储的是StringHttpMessageConverter类型的消息转换器
11 // StringHttpMessageConverter的默认字符集是ISO-8859-1,在此处设置utf-8字符集避免产生乱码
12 template.getMessageConverters().set(1, new StringHttpMessageConverter(Charset.forName("utf-8")));
13 return template;
14 }
15
16 public String post(String url, String jsonParam){
17 // 自定义请求头
18 HttpHeaders headers = new HttpHeaders();
19 headers.setContentType(MediaType.APPLICATION_JSON);
20 headers.setAcceptCharset(Collections.singletonList(Charset.forName("utf-8")));
21 headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
22
23 // 参数
24 HttpEntity<String> entity = new HttpEntity<String>(jsonParam, headers);
25 // POST方式请求
26 ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
27 if(responseEntity == null){
28 return null;
29 }
30
31 return responseEntity.getBody().toString();
32 }
33
34 }
三、通过HttpClient调用
1 public class HttpClientUtil {
2
3 public String post(String url, Map<String, Object> pramMap) throws Exception {
4 String result = null;
5 // DefaultHttpClient已过时,使用CloseableHttpClient替代
6 CloseableHttpClient closeableHttpClient = null;
7 CloseableHttpResponse response = null;
8 try {
9 closeableHttpClient = HttpClients.createDefault();
10 HttpPost postRequest = new HttpPost(url);
11 List<NameValuePair> pairs = new ArrayList<>();
12 if(pramMap!=null && pramMap.size() > 0){
13 for (Map.Entry<String, Object> entry : pramMap.entrySet()) {
14 pairs.add(new BasicNameValuePair(entry.getKey(), String.valueOf(entry.getValue())));
15 }
16 }
17 UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(pairs, "utf-8");
18 postRequest.setEntity(formEntity);
19
20 response = closeableHttpClient.execute(postRequest);
21 if(response!=null && response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
22 result = EntityUtils.toString(response.getEntity(), "utf-8");
23 }else{
24 throw new Exception("post请求失败,url" + url);
25 }
26
27 } catch (Exception e) {
28 e.printStackTrace();
29 throw e;
30 } finally {
31 try {
32 if(response != null){
33 response.close();
34 }
35 if(closeableHttpClient != null){
36 closeableHttpClient.close();
37 }
38 } catch (IOException e) {
39 e.printStackTrace();
40 }
41 }
42
43 return result;
44 }
45
46 }
Java调用RestFul接口的更多相关文章
- 三种方法实现java调用Restful接口
1,基本介绍 Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多, 本次介绍三种: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring ...
- java调用restful接口的方法
Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法如下: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring的RestTemplate
- Java 调用Restful API接口的几种方式--HTTPS
摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful ...
- 三种方法实现调用Restful接口
1.基本介绍 Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多, 本次介绍三种: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring ...
- Java调用webservice接口方法
java调用webservice接口 webservice的 发布一般都是使用WSDL(web service descriptive langu ...
- python 调用RESTFul接口
本周需要将爬虫爬下来的数据入库,因为之前已经写好PHP的接口的,可以直接通过python调用PHP接口来实现,所以把方法总结一下. //python编码问题,因为好久用,所以很容易出现 # -*- c ...
- Java 调用http接口(基于OkHttp的Http工具类方法示例)
目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...
- (二)通过JAVA调用SAP接口 (增加一二级参数)
(二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...
- Java方法通过RestTemplate调用restful接口
背景:项目A需要在代码内部调用项目B的一个restful接口,该接口是POST方式,header中 Authorization为自定义内容,主要传输的内容封装在body中,所以使用到了RestTemp ...
随机推荐
- SpringBoot全局异常拦截
SpringBoot全局异常捕获 使用到的技能 @RestControllerAdvice或(@ControllerAdvice+@ResponseBody) @ExceptionHandler 代码 ...
- Fragment学习
利用Fragment可以动态的加载页面,减少Activity的数量. 便于开发 类似与html中FragmentSet一样 嵌套在一起,使每个页面为独立的 代码如下: package com.exam ...
- SpringBoot异常处理(一)
ERROR:严重问题,我们无法处理 EXCEPTION:RuntimeException 编译期不检查,出现问题需要我们修改代码 非RuntimeException(CheckedExceptio ...
- sendfile“零拷贝”和mmap内存映射
在学习sendfille之前,我们先来了解一下浏览器访问页面时,后台服务器的大致工作流程. 下图是从用户访问某个页面到页面的显示这几秒钟的时间当中,在后台的整个工作过程. 如上图,黑色箭头所示的过程, ...
- mysql explain参数详解
主要对几个参数做一些记录 type:显示的是访问类型 从最好到最差的连接类型为:const.eq_reg.ref.range.index和ALL 至少要达到range,基本是ref 最好是const ...
- 美团在TIDB方面的实践
摘自-https://www.v2ex.com/t/508094 一.背景和现状 在美团,基于 MySQL 构建的传统关系型数据库服务已经难于支撑公司业务的爆发式增长,促使我们去探索更合理的数据存储方 ...
- 元旦在家撸了两天Seata源码,你们是咋度过的呢?
撸Seata源码 2020年12月31日晚23点30分,我发了2020年的最后一个朋友圈:假期吃透Seata源码,有组队的吗? 不少小伙伴都来点赞了, 其中也包括Seata项目的发起人--季敏大佬哦! ...
- ConcurrentHashMap 并发之美
一.前言 她如暴风雨中的一叶扁舟,在高并发的大风大浪下疾驰而过,眼看就要被湮灭,却又在绝境中绝处逢生 编写一套即稳定.高效.且支持并发的代码,不说难如登天,却也绝非易事. 一直有小伙伴向我咨询关于Co ...
- 每日一个linux命令5 -- rm
rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有文件均保持不变. rm是一个危险的命 ...
- HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验
HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验 硬件平台 基于正点原子战舰V3开发板 MCU:STM32F103ZET6 片上SRAM大小:64KBytes 片上FLASH大小 ...