Http Get リクエスト Post リクエストの書き込み (トークン取得を伴う) および json から Java エンティティ クラスへの変換 (Json データを Java エンティティおよび Java 配列に解析するコード)。

HttpのGetリクエストPostリクエストの書き方(トークン取得を伴う)

現在、プロジェクトはマイクロサービスを使用していますが、.net チームは javaAPI を呼び出す必要があります。一部の javaWeb プロジェクトでは javaApi も呼び出されます。Http 呼び出しのコードと、Json データを Java エンティティおよび Java 配列に解析するコードを以下に示します。

アクセストークン

urlstr、user、password は、トークンとアカウントのパスワードを取得するためのリンクです

	/**
     * 获取本地token 方法
     */
    public static String getToken() throws IOException {
    
    
        String urlstr = "https://xxx.xxxx.com.cn/oauth/token";
        String user = "xxx";
        String password = "xxxx";
        StringBuilder data = new StringBuilder();
        URL url = new URL(urlstr);
        // 打开和URL之间的连接
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("POST");//请求post方式
        con.setUseCaches(false); // Post请求不能使用缓存
        con.setDoInput(true);// 设置是否从HttpURLConnection输入,默认值为 true
        con.setDoOutput(true);// 设置是否使用HttpURLConnection进行输出,默认值为 false
        //设置header内的参数 connection.setRequestProperty("健, "值");
        String authString = user + ":" + password;
        byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
        String authStringEnc = new String(authEncBytes);
        con.setRequestProperty("Authorization", "Basic " + authStringEnc);
        //设置body内的参数,put到JSONObject中
        String lineStart = "--";
        String boundary = "FlPm4LpSXsE";    // 数据分隔符
        String lineEnd = "\r\n";
        con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
        StringBuilder sb = new StringBuilder();
        sb.append(lineStart + boundary + lineEnd);
        sb.append("Content-Disposition: form-data; name=\"grant_type\"" + lineEnd);
        sb.append(lineEnd);
        sb.append("client_credentials" + lineEnd);
        sb.append(lineStart + boundary + lineEnd);
        sb.append("Content-Disposition: form-data; name=\"scope\"" + lineEnd);
        sb.append(lineEnd);
        sb.append("all" + lineEnd);
        String ss = "\r\n--" + boundary + "--\r\n";
        sb.append(ss);
        DataOutputStream output = new DataOutputStream(con.getOutputStream());
        try {
    
    
            output.write(sb.toString().getBytes("utf-8"), 0, sb.toString().getBytes("utf-8").length);// 发送表单字段数据
            output.flush();
            output.close();
        } catch (IOException e) {
    
    
            throw new RuntimeException(e);
        }
        // 获取服务端响应,通过输入流来读取URL的响应
        InputStream is = con.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
        StringBuffer sbf = new StringBuffer();
        String strRead = null;
        while ((strRead = reader.readLine()) != null) {
    
    
            sbf.append(strRead);
            sbf.append("\r\n");
        }
        reader.close();
        // 关闭连接
        con.disconnect();
        // 打印读到的响应结果
        System.out.println("运行结束:" + sbf.toString());
        String obj = sbf.toString();
        JSONObject jo = JSON.parseObject(obj);
        String token = jo.getString("access_token");
        return token;
    }

HTTP 取得リクエスト

public static String doGet(String httpUrl) throws IOException {
    
    

    //根据实际情况写入acces_token,大多数在headers,我的方式是query的方式,是直接显示在url上的(不推荐)
      //  String api = YXW_API.getYXW_API();
        //有参数
        if (httpUrl.contains("?")) {
    
    
            httpUrl = YXW_API + httpUrl + "&access_token=" + getToken();
        } else {
    
    
            httpUrl = YXW_API + httpUrl + "?access_token=" + getToken();
        }

        // System.out.println("请求地址为:"+httpUrl);
        HttpURLConnection connection = null;
        InputStream is = null;
        BufferedReader br = null;
        String result = null;// 返回结果字符串
        try {
    
    
            // 创建远程url连接对象
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
            connection = (HttpURLConnection) url.openConnection();
            // 设置连接方式:get
            connection.setRequestMethod("GET");
            // 设置连接主机服务器的超时时间:15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取远程返回的数据时间:60000毫秒
            connection.setReadTimeout(60000);
            // 发送请求
            connection.connect();
            // 通过connection连接,获取输入流
            if (connection.getResponseCode() == 200) {
    
    
                is = connection.getInputStream();
                // 封装输入流is,并指定字符集
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                // 存放数据
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                while ((temp = br.readLine()) != null) {
    
    
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (MalformedURLException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            // 关闭资源
            if (null != br) {
    
    
                try {
    
    
                    br.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }

            if (null != is) {
    
    
                try {
    
    
                    is.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }

            connection.disconnect();// 关闭远程连接
        }
        log.info("API接口GET请求地址为:{}", httpUrl);
        return result;
    }

HTTP 投稿リクエスト

 public static String doPost(String httpUrl, String param) {
    
    
        httpUrl = YXW_API + httpUrl;
        HttpURLConnection connection = null;
        InputStream is = null;
        OutputStream os = null;
        BufferedReader br = null;
        String result = null;
        try {
    
    
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开连接
            connection = (HttpURLConnection) url.openConnection();
            // 设置连接请求方式
            connection.setRequestMethod("POST");
            // 设置连接主机服务器超时时间:15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取主机服务器返回数据超时时间:60000毫秒
            connection.setReadTimeout(60000);
            // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
            connection.setDoOutput(true);
            // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
            connection.setDoInput(true);
            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
            connection.setRequestProperty("Content-Type", "application/json; charset=utf-8");
            // 通过连接对象获取一个输出流
            os = connection.getOutputStream();
            // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
            os.write(param.getBytes());
            int code = connection.getResponseCode();
            System.out.println(code);
            // 通过连接对象获取一个输入流,向远程读取
            if (code == 200) {
    
    

                is = connection.getInputStream();
                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
    
    
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            } else {
    
    

                result = "返回错误。ResponseCode: " + code;
            }
        } catch (MalformedURLException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            // 关闭资源
            if (null != br) {
    
    
                try {
    
    
                    br.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            if (null != os) {
    
    
                try {
    
    
                    os.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            if (null != is) {
    
    
                try {
    
    
                    is.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
            // 断开与远程地址url的连接
            connection.disconnect();
        }
        log.info("API接口POST请求地址为:{}", httpUrl);
        return result;
    }

json を Java エンティティ クラスに変換します (Json データを Java エンティティおよび Java 配列に解析するコード)。

まず第一に、restful の形式のインターフェイスは通常、固定の戻りメソッドを定義します。私の場合はコード、データ、メッセージです。

@Data
public class ResponseVO<T> {
    
    
    private int code;
    private String msg;
    private T data;
}

jsonをエンティティとして解析する

     ResponseVO<DearLine> responseVO = null;
        try {
    
    
            String s = APIHelper.Get("xxxx/dxxxxxx/getxxxxxxInfo?xxId=" + id;
            JSONObject jsonObject = JSON.parseObject(s);
            responseVO = JSONObject.toJavaObject(jsonObject, ResponseVO.class);
            if (responseVO.getCode() == 0) {
    
    
                Object data = responseVO.getData();
                JSONObject jo1 = JSON.parseObject(data.toString());
                DearLine dearLine = JSONObject.toJavaObject(jo1, DearLine.class);
                record.setDearLine(dearLine);
            } else {
    
    
                throw new RuntimeException("获取xxxxx信息失败");
            }
        } catch (Exception e) {
    
    
            System.out.println(e.getMessage());
            log.error("获取xxxx信息 error:", e);
        }

jsonを解析してリスト化する

    ResponseVO<List<xxxx>> responseVO = null;
    List<xxxx> listVos = new ArrayList<>();
        try {
    
    
            String s = APIHelper.Get("xxxx/xxxx/xxxx");
            JSONObject jsonObject = JSON.parseObject(s);
            responseVO = JSONObject.toJavaObject(jsonObject, ResponseVO.class);
            if (responseVO.getCode() == 0) {
    
    
                JSONArray jsonArray = jsonObject.getJSONArray("data");
                listVos = JSON.parseArray(jsonArray.toJSONString(), xxxx.class);
            } else {
    
    
                throw new RuntimeException("获取xxxx信息失败");
            }
        } catch (Exception e) {
    
    
            System.out.println(e.getMessage());
            log.error("获取xxxx信息 error:", e);
        }

コピーして使用するだけで、フレンドリーで使いやすい

依存関係をアタッチする

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>

おすすめ

転載: blog.csdn.net/luck_sheng/article/details/125553829