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

时间:2015-08-14 02:03:02

标签: java json regex rest post

您好我是Java的新手,并向网址发出POST请求。但是我试图将一个帖子请求发送到一个网址,该网址要求主体看起来像这样:

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

然而,当我运行此代码时,我得到415的响应。我认为这是因为这个名称值对不是创建JSON对象,但我不知道如何在Java中创建Json对象并且在线文档已经没有帮助。据推测,基本名称值对可行,但并非所有对都是字符串字符串。请注意,regexs字段是一个字符串数组。

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

帮助!谢谢!

注意:我也尝试过类似HTTP POST using JSON in Java之类的内容,但我无法将其用于特定目的。如果它有助于我的regexArray不必是一个数组(我只在regex上,所以对象中的这个字段将永远像这个正则表达式:[“string1”]

4 个答案:

答案 0 :(得分:0)

 if(request.getPostMap().size() > 0) {
    List<NameValuePair>list=new ArrayList<NameValuePair>();
    Map<String, String> postMap = request.getPostMap();
    for (String key : postMap.keySet()) {
    String value = postMap.get(key);
    value = value==null ? "" : value;
    list.add(new BasicNameValuePair(key, value));
    }
    httppost.setEntity(new UrlEncodedFormEntity(list, request.getCharset()));
  }

此代码段代码可以为您提供帮助,postMap是您的JSON值

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

.header nav ul ul { 
    position:absolute; 
    left: -999em; 
    margin-top: 0;
    padding-top: 15px;
}

现在填充MyBean的对象。让我们说对象名是myBean。
像这样转换: -

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非常简单。还有一些选项,比如你是否要序列化空值,是否有非常好的印刷json以及许多可以帮助你的东西。它只是一个开始,只是探索Gson图书馆。

答案 3 :(得分:0)

我也建议gson。我不熟悉json-simple,但也会把jackson看成是一种潜在的选择。