zoukankan      html  css  js  c++  java
  • rest之Http访问方式

      最近的一段时间一直在研究有关rest的资料。相信有不少人也都或多或少的接触过rest架构。rest是一直新的规范,现在java中,.net中也都有针对rest开发的一些框架。我最近也研究了不少框架,但最后还是决定用http的方式来访问rest结构的数据。即使用Http的GET,PUT,POST和DELETE来对rest结构的数据进行操作。

      因为我是做java的,所以我主要针对java来说。java中实现Http访问rest,主要是通过一个类,HttpURlconnection,使用这个类来实现的。下面请看一下代码:

        /**
         * 执行REST的post方法
         * @param urlStr
         * @param param
         * @param accept
         * @return 成功:true / 失败:false
         * @throws Exception
         * 
         * @author*/
        public static String doPost(String urlStr, String param, String accept)
                throws Exception {
            boolean state = false;
            URL url = new URL(urlStr);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 设置发送请求的方式
            conn.setRequestMethod(SERVLET_POST);
            // 设置参数的格式类型
            conn.setRequestProperty("Content-Type", accept);
            // 打开输入输出,在output中传输参数
            conn.setDoInput(true);
            conn.setDoOutput(true);
            OutputStream os = conn.getOutputStream();
            // 把参数写入output流,使用UTF-8编码
            os.write(param.getBytes("utf-8"));
            os.close();
            // 正常时返回的状态码为200
            if (conn.getResponseCode() == 200) {
                state = true;
                // 获取返回的内容
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                // 输出返回的信息
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                    return line;
                }
                br.close();
            } else {
                System.out.println(SERVLET_POST + " [ERROR] CODE: "
                        + conn.getResponseCode());
            }
            return "get error:no value";
        }

    这是针对post方法来说的,可以使用这个方法,来传到你想要传的webservice接口,并返回一个数据。

    下面这个方法是GET方法,主要用来获取数据的:

    /**
         * 执行REST的get方法
         * @param urlStr
         * @param accept
         * @return REST返回的数据
         * @throws Exception
         * 
         * @author*/
        public static String doGet(String urlStr, String accept)
                throws Exception {
            String state = "";
            URL url = new URL(urlStr);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 设置发送请求的方式
            conn.setRequestMethod(SERVLET_GET);
            // 设置返回信息的格式类型
            conn.setRequestProperty("Accept", accept);
            conn.connect();
            // 正常时返回的状态码为200
            if (conn.getResponseCode() == 200) {
                // 获取返回的内容
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line;
                // 输出返回的信息
                while ((line = br.readLine()) != null) {
                    state += line;
                }
                br.close();
            } else {
                System.out.println(SERVLET_GET + " [ERROR] CODE: "
                        + conn.getResponseCode());
            }
            return state;
        }

    下面这个PUT方法,可以用来保存REST数据,也可以写入数据库中,目前我们使用的是非关系型数据库:

    /**
         * 执行REST的put方法
         * @param urlStr
         * @param param
         * @param accept
         * @return 成功:true / 失败:false
         * @throws Exception
         * 
         * @author*/
        public String doPut(String urlStr, String param, String accept)
                throws Exception {
            boolean state = false;
            URL url = new URL(urlStr);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 设置发送请求的方式
            conn.setRequestMethod(SERVLET_PUT);
            // 设置参数的格式类型
            conn.setRequestProperty("Content-Type", accept);
            // 打开输入输出,在output中传输参数
            conn.setDoInput(true);
            conn.setDoOutput(true);
            OutputStream os = conn.getOutputStream();
            // 把参数写入output流,使用UTF-8编码
            os.write(param.getBytes("utf-8"));
            os.close();
            // 正常时返回的状态码为200
            if (conn.getResponseCode() == 200) {
                state = true;
                // 获取返回的内容
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                // 输出返回的信息
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                    return line;
                    
                }
                br.close();
            } else {
                System.out.println(SERVLET_PUT + " [ERROR] CODE: "
                        + conn.getResponseCode());
            }
            return "return error:put failure";
        }

    最后一个DELETE方法,用来删除数据的方法:

    /**
         * 执行REST的delete方法
         * @param urlStr
         * @param accept
         * @return REST返回的数据
         * @throws Exception
         * 
         * @author*/
        public String doDelete(String urlStr, String accept) 
                throws Exception {
            boolean state = false;
            URL url = new URL(urlStr);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 设置发送请求的方式
            conn.setRequestMethod(SERVLET_DELETE);
            // 设置返回信息的格式类型
            conn.setRequestProperty("Accept", accept);
            // 正常时返回的状态码为200
            if (conn.getResponseCode() == 200) {
                
                return "success";
            } else {
                System.out.println(SERVLET_DELETE + " [ERROR] CODE: "
                        + conn.getResponseCode());
            }
            return "";
        }
  • 相关阅读:
    安卓数据存储(3):SQLite数据库存储
    安卓活动间的传值问题
    JavaScript、jQuery获取radio、checkbox选中的值
    无法连接到VSS资源数据库
    JQuery自定义搜索控件
    UIAlertView使用
    Xcode使用git管理版本
    达乐居视频网前台页面的总结
    Spark环境搭建遇到的问题
    在IE中启动火狐——自定义浏览器链接协议
  • 原文地址:https://www.cnblogs.com/shunxiyuan/p/2472113.html
Copyright © 2011-2022 走看看