首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用java客户端传递json对象调用Rest API

使用java客户端传递json对象调用Rest API
EN

Stack Overflow用户
提问于 2018-07-30 02:16:04
回答 1查看 3.7K关注 0票数 1

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

我想查询特定疾病类型的所有病例(例如下面提到的TCGA-LAML )。

在SOAP Ui中,当我以JSON格式发布以下请求时,.It会给我完美的答案{ "filters":{"op":" in ","content":{ "field":"cases.project.project_id","value":"TCGA-LAML“}

但我必须通过java客户端调用POST。即使经过努力,我也不能正确地设置输入参数。

我在这里发布我的代码。你能帮我改正代码吗?

代码语言:javascript
复制
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);
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 03:30:43

我认为下面的解决方案应该对你有效

代码语言:javascript
复制
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方法,它会将其转换为有效负载。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51583206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档