Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java客户端传递json对象调用RESTAPI_Java_Json_Rest_Api - Fatal编程技术网

使用java客户端传递json对象调用RESTAPI

使用java客户端传递json对象调用RESTAPI,java,json,rest,api,Java,Json,Rest,Api,我是JSON新手。我正在调用一个公共RESTAPI 我想查询特定疾病类型的所有病例(例如下面提到的TCGA-LAML) 在SOAPUI中,当我以JSON格式发布下面的请求时,它给了我完美的答案 { “过滤器”: {“op”:“in”, “内容”:{ “字段”:“cases.project.project\u id”, “值”:[“TCGA-LAML”] } } } 但是我必须通过java客户端给POST打电话。即使经过努力,我也无法正确设置输入参数 我在这里张贴我的代码。你能帮我更正一下密码吗

我是JSON新手。我正在调用一个公共RESTAPI

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

在SOAPUI中,当我以JSON格式发布下面的请求时,它给了我完美的答案 { “过滤器”: {“op”:“in”, “内容”:{ “字段”:“cases.project.project\u id”, “值”:[“TCGA-LAML”] } } }

但是我必须通过java客户端给POST打电话。即使经过努力,我也无法正确设置输入参数

我在这里张贴我的代码。你能帮我更正一下密码吗

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);
    }

}

我认为下面的解决方案应该适合你

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 + "] } } }";
    }

}
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.io.OutputStreamWriter;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.List;
公共类新测试{
公共静态字符串sendPostRequest(字符串请求URL、字符串负载){
StringBuffer jsonString=新的StringBuffer();
试一试{
URL=新URL(请求URL);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(真);
connection.setRequestMethod(“POST”);
setRequestProperty(“接受”、“应用程序/json”);
setRequestProperty(“内容类型”、“应用程序/json”);
OutputStreamWriter writer=新的OutputStreamWriter(connection.getOutputStream());
writer.write(有效载荷);
writer.close();
BufferedReader br=新的BufferedReader(新的InputStreamReader(connection.getInputStream());
弦线;
而((line=br.readLine())!=null){
jsonString.append(第行);
系统输出打印项次(行);
}
br.close();
连接断开();
}捕获(例外e){
抛出新的RuntimeException(例如getMessage());
}
返回jsonString.toString();
}
公共静态void main(字符串[]args){
列表值=新的ArrayList();
添加(“TCGA-LAML”);
字符串requestUrl=”https://api.gdc.cancer.gov/cases";
sendPostRequest(requestUrl,preparePayload(值));
}
私有静态字符串preparePayload(列表值){
StringBuilder sb=新的StringBuilder();
for(字符串值:值){
sb.附加(“\”+值+“\”,”);
}
String desiredValue=sb.toString().substring(0,sb.toString().length()-1);
返回“{\”过滤器\“:{\”操作\“:\”在\“,\”内容\“:{\”字段\“:\“cases.project.project\u id\”,\“value\”:[“+desiredValue+”]}}}”;
}
}

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

是否运行此查询:->{“过滤器”:{“op”:“in”,“content”:{“field”:“cases.project.project_id”,“value”:[“TCGA-LAML”]}}?是,我想运行此查询。但无法生成此参数。请将“字符串有效负载”更改为->字符串有效负载=“{\”过滤器\“:{\”操作\“:\”在\“,\”内容\“:{\”字段\“:\”cases.project.project\u id\“,\”值\“:[\“TCGA-LAML\”]}}”;现在运行你的程序,然后告诉我你是否得到了你想要的输出,如果是的话,我会帮你把它参数化!是的,Bhavya这一次它给出了期望的结果。太好了,现在你想参数化哪个参数?听到这个很好。请接受答案并结束此问题。谢谢你。真的很抱歉再次打扰你。{“数据”:{“点击次数”:[{“更新日期时间”:“2018-05-24T11:22:57.727521-05:00”,“提交者id”:“TCGA-AB-2956”,“id”:“c1f908ce-f6d5-4”,“疾病类型”:“急性髓系白血病”,}]响应的一部分。我想在我的java代码中访问提交者的id、id和疾病类型。你能帮我一下吗。这将帮助你进行json解析Hanks Bhavya我尝试过这个。但是它有一些问题json路径2.4.0没有正确的API。而在3.0.0中,我得到了ava.lang.NoClassDefFoundError:io/Restassed/internal/AssertPara将以下pom条目添加到:->org.json json 20160810。并删除上一条,我建议您启动一个新线程,因为在注释部分回答您的查询很困难,而且格式不正确