在JAVA中将JSON对象作为POST发送到rest服务

在JAVA中将JSON对象作为POST发送到rest服务,java,json,regex,rest,post,Java,Json,Regex,Rest,Post,您好,我是Java新手,对URL发出POST请求。但是,我正在尝试向url发送post请求,该url希望正文如下所示: { "startTime":"2013/09/09 11:00", "endTime":"2013/09/09 13:00", "pool": "webscr,paymentserv", "regexs":["string1","string2"], "searchMode":"simple", } 对我来说,这看起来像一个JSON对象。因此,在我的代码中,我

您好,我是Java新手,对URL发出POST请求。但是,我正在尝试向url发送post请求,该url希望正文如下所示:

{ "startTime":"2013/09/09 11:00",
  "endTime":"2013/09/09 13:00",
  "pool": "webscr,paymentserv",
  "regexs":["string1","string2"],
  "searchMode":"simple",
}
对我来说,这看起来像一个JSON对象。因此,在我的代码中,我尝试执行以下操作

    String url = "http://restAPIService.com/regex/request";

    HttpClient client = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost(url);

    List<BasicNameValuePair> urlParameters = new ArrayList<BasicNameValuePair>();
    urlParameters.add(new BasicNameValuePair("startTime", startTime));
    urlParameters.add(new BasicNameValuePair("endTime", endTime));
    urlParameters.add(new BasicNameValuePair("pool", pool));
    for (int i = 0; i < regexArray.length; i++) {
        urlParameters.add(new BasicNameValuePair("regexs[]",regexArray[i]));
   }

    post.setEntity(new UrlEncodedFormEntity(urlParameters));
    HttpResponse response = client.execute(post);

    BufferedReader rd = new BufferedReader(
                    new InputStreamReader(response.getEntity().getContent()));

    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }
stringurl=”http://restAPIService.com/regex/request";
HttpClient client=HttpClientBuilder.create().build();
HttpPost=新的HttpPost(url);
List urlParameters=new ArrayList();
添加(新的BasicNameValuePair(“startTime”,startTime));
添加(新的BasicNameValuePair(“endTime”,endTime));
添加(新的BasicNameValuePair(“pool”,pool));
for(int i=0;i
然而,当我运行这段代码时,我得到了415的响应。我认为这是因为这个名称-值对并没有创建JSON对象,但我不知道如何在Java中创建JSON对象,在线文档也没有帮助。基本名称-值对可能会起作用,但并非所有对都是字符串。请注意,regexs字段是一个字符串数组

创建JSON对象作为url参数或请求主体发送的最佳方法是什么

救命啊!谢谢

注意:我也尝试过这样做,但我无法让它为特定目的工作。如果有帮助,我的regexArray不必是数组(我只在regex上始终有,因此对象中的此字段将始终像regexs:[“string1”]

If(request.getPostMap().size()>0){
Listlist=新的ArrayList();
Map postMap=request.getPostMap();
for(字符串键:postMap.keySet()){
字符串值=postMap.get(键);
value=value==null?“:值;
添加(新的BasicNameValuePair(键,值));
}
setEntity(新的UrlEncodedFormEntity(list,request.getCharset());
}
这段代码可能对您有所帮助,
postMap
是您的JSON值

if(request.getPostMap().size()>0){
Listlist=新的ArrayList();
Map postMap=request.getPostMap();
for(字符串键:postMap.keySet()){
字符串值=postMap.get(键);
value=value==null?“:值;
添加(新的BasicNameValuePair(键,值));
}
setEntity(新的UrlEncodedFormEntity(list,request.getCharset());
}

这段代码可能会对您有所帮助,
postMap
是您的JSON值

您可以在java中使用一些JSON工具包,例如,等等。

您可以在java中使用一些JSON工具包,例如,等等。

只需创建一个包含必需字段的Bean,然后填充它的对象,然后将该对象传递给gson。
例如:

public class MyBean {

private String startTime;
private String endTime;
private String pool;
private List<String> regexes;
private String searchMode;

// getters and setters.....
}
你就完了!

除了gson,如果您愿意,您还可以使用jackson库完成相同的任务。但是,首先,我认为gson非常简单。还有一些选项,如是否要序列化null、是否预打印json以及许多其他选项,这些选项都会帮到您。这只是一个开始,只需探索gson库。

只需使用所需的fie创建一个Bean即可lds,然后填充它的对象,然后将该对象传递给gson。
例如:

public class MyBean {

private String startTime;
private String endTime;
private String pool;
private List<String> regexes;
private String searchMode;

// getters and setters.....
}
你就完了!

除了gson,如果你愿意,你也可以使用jackson库来完成同样的任务。但是,首先,我认为gson非常简单。还有一些选项,比如你是否想序列化null,是否预打印json,以及许多对你有帮助的选项。这只是一个开始,只是探索gson库。

我还建议使用gson。我不是我不熟悉json simple,但也会将jackson视为潜在的替代品。

我还建议使用gson。我不熟悉json simple,但也会将jackson视为潜在的替代品

Gson gson = new Gson();
String json = gson.toJson(myBean);