您好我是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”]
答案 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-simple,gson等。
答案 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看成是一种潜在的选择。