当前位置: 首页 > 知识库问答 >
问题:

使用传递json对象的java客户机调用Rest API

柴俊捷
2023-03-14

我对JSON是新手。我正在调用公共rest API https://API.gdc.cancer.gov/cases

package downloadtoolproject; 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import java.net.HttpURLConnection;
import java.net.URL;

public class Newtest {
    public static String sendPostRequest(String requestUrl, String payload) {
        StringBuffer jsonString = new StringBuffer();
        try {
            URL url = new URL(requestUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Accept", "application/json");
            connection.setRequestProperty("Content-Type", "application/json");
            OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
            writer.write(payload);
            writer.close();
            BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));

            String line;
            while ((line = br.readLine()) != null)
            {
                jsonString.append(line);
                System.out.println(line);
            }
            br.close();
            connection.disconnect();
        }
        catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
        return jsonString.toString() ;
    }

    public static void main(String [] args)
    {
        String payload = "{\"field\":\"project_id\",\"value\":[\"TCGA-LAML\"]}";
        String requestUrl="https://api.gdc.cancer.gov/cases";
        sendPostRequest(requestUrl, payload);
    }

}

共有1个答案

公孙驰
2023-03-14

我想下面的解决办法应该对你有用

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class Newtest {
    public static String sendPostRequest(String requestUrl, String payload) {
        StringBuffer jsonString = new StringBuffer();
        try {
            URL url = new URL(requestUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Accept", "application/json");
            connection.setRequestProperty("Content-Type", "application/json");
            OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
            writer.write(payload);
            writer.close();
            BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));

            String line;
            while ((line = br.readLine()) != null) {
                jsonString.append(line);
                System.out.println(line);
            }
            br.close();
            connection.disconnect();
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
        return jsonString.toString();
    }

    public static void main(String[] args) {
        List<String> values = new ArrayList<>();
        values.add("TCGA-LAML");
        String requestUrl = "https://api.gdc.cancer.gov/cases";
        sendPostRequest(requestUrl, preparePayload(values));

    }

    private static String preparePayload(List<String> values) {
        StringBuilder sb = new StringBuilder();
        for (String value : values) {
            sb.append("\"" + value + "\",");
        }
        String desiredValue = sb.toString().substring(0, sb.toString().length() - 1);
        return "{ \"filters\": {\"op\":\"in\", \"content\":{ \"field\":\"cases.project.project_id\", \"value\":[" + desiredValue + "] } } }";
    }

}

您只需添加values列表中的所有输入值,并将其传递给PreparePayload方法,它就会将其转换为有效的有效负载

 类似资料:
  • 我有json格式,我想用JSONObject和JSONArray在java代码中创建它,但是我没有得到正确格式的输出。JSON格式如下所示。 我如何用java创建这个json对象,因为我想用这个对象创建使用NVD3的多条形图。如有任何帮助,不胜感激!

  • 我试图通过web api执行粗鲁的操作。所以我把客户json从客户端传递到web api操作。 这是我从客户端传递给操作的json。 这是我得到的错误信息,当我做同样的事情从小提琴手。 {“Message”:“请求包含实体正文,但没有内容类型标头。此资源不支持推断的媒体类型“application/octet stream”。”,“ExceptionMessage”:“没有MediaTypeFor

  • 问题内容: 我正在尝试使用 prepareForSegue()* 将对象传递到另一个场景 * 我有currentVehicle对象来捕获这些对象。但是,当我尝试运行时,它坏了,并得到有关向下转换的错误。 错误编辑 无法将类型“ XXX.DisplayViewController”(0x1082dcd80)的值强制转换为“ XXX.VehicleDetailsTableViewController”

  • 问题内容: 是否可以通过Java通过引用传递对象 就像在C#中一样 问题答案: 不,这在Java中是不可能的。 在Java中,方法的所有参数均按值传递。注意非原始型的的变量,它们是对对象的引用,也由值来传递:在这种情况下, 参考 是 由值来传递 。请注意,按值传递引用与按引用传递不同。

  • 我在上使用。有一个用编写的rest服务,它返回Book实例的集合。发送get请求的rest客户端代码: 书籍类是一个战记: 我应用的get函数基于http://www.adam-bien.com/roller/abien/entry/jax_rs_returning_a_list博客文章,这个解决方案也应用在Javaee 7教程中。 不幸的是,在这种情况下,我得到以下编译错误: 其中T#1、T#2

  • 问题内容: 我试图将对象从我的应用程序委托传递到另一个类的通知接收器。 我想传递整数。现在我有: 在接收器中: 在执行通知的类中: 但是我想将对象传递给另一个类。 问题答案: 您必须使用“ userInfo”变体,并传递一个包含messageTotal整数的NSDictionary对象: 在接收端,您可以按以下方式访问userInfo字典: