如何在 java 中将 json 作为 Rest Post Web 服务的查询参数传递
How do I pass json as a query parameter on Rest Post web service in java
如何在 java
中将 json 作为 Rest Post Web 服务的查询参数传递
例如:
https://testvpa.net/WebService/ViALoggingRestWS/ViALoggingService.svc/StartCall?parameter={"machineName":"KK-IVR01","appName":"KKApp","startTime":"2018-02-06T21:38:32","portID":"01","ani":"9189280000","dnis":"8559281111","ctiCallID":"01"}
我正在尝试这样的事情:
.....
try{
JSONObject obj = new JSONObject();
obj.put("machineName",machineName);
obj.put("appName", appName);
obj.put("startTime", formattedCurrentDate);
obj.put("portID",portID);
obj.put("ani",ani);
obj.put("dnis", dnis);
obj.put("ctiCallID", ctiCallID);
String strobj = obj.toString();
String uri = wsUri+"/StartCall?";
HttpClient client = new HttpClient();
client.getParams().setConnectionManagerTimeout(1300);
client.getParams().setSoTimeout(13000);
PostMethod method = new PostMethod(uri);
method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
method.setQueryString("parameter="+strobj );
int statusCode = client.executeMethod(method);
byte[] responseBody = method.getResponseBody();
output = new String(responseBody);
}
.....
但是我在运行时得到一个 "Invalid URI"。它似乎不喜欢查询参数是 json 字符串。我在某处读到有关 json 字符串编码的内容...我是否需要以某种方式对 json 字符串进行编码?
如果您使用 POST 请求,您应该在请求正文而不是查询参数中传递 json 对象。
您可以查看此问题以获取更多详细信息:Which characters make a URL invalid?
一般来说,URI 中接受的字符是:[A-Z][a-z][0-9]-._~
也允许使用以下字符,但在 URI 的某些部分具有特殊含义::/?#[]@!$&'()*+,;=
不允许每隔一个字符,必须是 percent-encoded。第二组字符也应该是 percent-encoded 以避免任何解析问题。
要对一个字符进行百分比编码,您需要使用它的十六进制值(例如,对于 space
字符,十六进制值为 20)并在其前面加上 %
字符。所以 John Doe
变成 John%20Doe
.
如何在 java
中将 json 作为 Rest Post Web 服务的查询参数传递例如:
https://testvpa.net/WebService/ViALoggingRestWS/ViALoggingService.svc/StartCall?parameter={"machineName":"KK-IVR01","appName":"KKApp","startTime":"2018-02-06T21:38:32","portID":"01","ani":"9189280000","dnis":"8559281111","ctiCallID":"01"}
我正在尝试这样的事情:
.....
try{
JSONObject obj = new JSONObject();
obj.put("machineName",machineName);
obj.put("appName", appName);
obj.put("startTime", formattedCurrentDate);
obj.put("portID",portID);
obj.put("ani",ani);
obj.put("dnis", dnis);
obj.put("ctiCallID", ctiCallID);
String strobj = obj.toString();
String uri = wsUri+"/StartCall?";
HttpClient client = new HttpClient();
client.getParams().setConnectionManagerTimeout(1300);
client.getParams().setSoTimeout(13000);
PostMethod method = new PostMethod(uri);
method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
method.setQueryString("parameter="+strobj );
int statusCode = client.executeMethod(method);
byte[] responseBody = method.getResponseBody();
output = new String(responseBody);
}
.....
但是我在运行时得到一个 "Invalid URI"。它似乎不喜欢查询参数是 json 字符串。我在某处读到有关 json 字符串编码的内容...我是否需要以某种方式对 json 字符串进行编码?
如果您使用 POST 请求,您应该在请求正文而不是查询参数中传递 json 对象。
您可以查看此问题以获取更多详细信息:Which characters make a URL invalid?
一般来说,URI 中接受的字符是:[A-Z][a-z][0-9]-._~
也允许使用以下字符,但在 URI 的某些部分具有特殊含义::/?#[]@!$&'()*+,;=
不允许每隔一个字符,必须是 percent-encoded。第二组字符也应该是 percent-encoded 以避免任何解析问题。
要对一个字符进行百分比编码,您需要使用它的十六进制值(例如,对于 space
字符,十六进制值为 20)并在其前面加上 %
字符。所以 John Doe
变成 John%20Doe
.