使用Java.net包下原生的HttpURLConnection对象调用HTTP接口(基于GET请求)

本篇将主要介绍如何使用HttpURLConnection对象调用本地普通、restful接口的实例.(实现代码中有大量注释供理解所用)

先准备好一个Springboot项目,方便自己编写接口与后台直接main方法调用.

Springboot工程结构展示:

第一步,我们先简单的在Controller层中编写两个不同类型的GET方法接口.

一个是普通的GET方法接口,简易代码如下:

@ResponseBody
@RequestMapping(value = "/user/msg",method = {RequestMethod.GET})
public String getUserMsg(@RequestParam("id")int id){
   System.out.println("GET请求需要获取Id为"+id+"的用户...");
   return "GET请求需要获取Id为"+id+"的用户...";
}

另一个是restful的GET方法接口,简易代码如下: 

@ResponseBody
@RequestMapping(value = "/user/{id}",method = {RequestMethod.GET})
public String getUserMsgRestful(@PathVariable("id")int id){
   System.out.println("GET请求需要获取Id为"+id+"的用户...");
   return "GET请求需要获取Id为"+id+"的用户...";
}

接口创建好后,启动Springboot项目,在浏览器上测试下接口

测试结果如下:

 接口验证可用后,第二步便是编写HttpURLConnection工具类,然后直接main方法调用两种接口即可.

public static String doGet(String httpUrl,Map<String,Object> params){
        String result = null;
        //try..catch语句外声明资源,方便finally统一进行关闭
        HttpURLConnection httpURLConnection = null;
        InputStream is = null;
        BufferedReader br = null;
        try{
            //判断get请求是否需要携带参数
            if(!params.isEmpty()){
                Set<String> keySet = params.keySet();
                Iterator iterator = keySet.iterator();
                StringBuffer stringBuffer = new StringBuffer();
                while (iterator.hasNext()){
                    String key = (String)iterator.next();
                    Object value = (Object)params.get(key);
                    // 1.普通get接口拼接参数方式: url?param1=value1&param2=value2...
                    if(stringBuffer.toString().equals("")){
                        stringBuffer.append("?");
                    } else {
                        stringBuffer.append("&");
                    }
                    stringBuffer.append(key);
                    stringBuffer.append("=");
                    stringBuffer.append(value);
                    // 2.restful接口拼接参数方式:url/{param1}/{param2}
                    /*stringBuffer.append("/");
                    stringBuffer.append(value);*/
                }
                httpUrl += stringBuffer.toString();
                System.out.println("GET请求接口地址"+httpUrl);
            }
            URL url = new URL(httpUrl);
            //通过指定url开启一个连接
            httpURLConnection = (HttpURLConnection)url.openConnection();
            //声明发送GET请求类型
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.connect();
            //HTTP:200状态码表示请求已成功
            if(httpURLConnection.getResponseCode()==200){
                is = httpURLConnection.getInputStream();
                //缓冲输入流包装字符输入流,放入内存中,字符读取效率更快.
                br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
                StringBuffer stringBuffer = new StringBuffer();
                String line = null;
                while((line = br.readLine())!=null){
                    //将每次读取的行进行保存
                    stringBuffer.append(line);
                    stringBuffer.append("\r\n");
                }
                result = stringBuffer.toString();
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try{
                //依次关闭开启的资源
                if(br!=null){
                    br.close();
                }
                if(is!=null){
                    is.close();
                }
                httpURLConnection.disconnect();
            } catch(Exception e){
                e.printStackTrace();
            }
        }
        return result;
    }

注意此处!由于访问普通接口和访问restful接口携带参数的方式不同,所以需要编写两种URL拼接方式.

while (iterator.hasNext()){
                    String key = (String)iterator.next();
                    Object value = (Object)params.get(key);
                    // 1.普通get接口拼接参数方式: url?param1=value1&param2=value2...
                    if(stringBuffer.toString().equals("")){
                        stringBuffer.append("?");
                    } else {
                        stringBuffer.append("&");
                    }
                    stringBuffer.append(key);
                    stringBuffer.append("=");
                    stringBuffer.append(value);
                    // 2.restful接口拼接参数方式:url/{param1}/{param2}
                    /*stringBuffer.append("/");
                    stringBuffer.append(value);*/
                }

第三步,便可以在HttpURLConnection工具类main方法中调用doGet方法.访问两种接口.

1. 调用普通接口

public static void main(String[] args) {
        Map<String,Object> params = new HashMap<>();
        params.put("id",1);
        System.out.println(doGet("http://127.0.0.1:8080/user/msg",params));
    }

调用结果如下图:

main程序输出返回值如下:

Springboot接口输出结果如下: 

2.调用restful接口

调用结果如下图:

main程序输出返回值如下:

Springboot接口输出结果如下:

以上便完成了使用HttpURLConnection对象向普通和restful接口发送GET请求的任务

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值