以下用ASP .NET编写的基于REST的Web服务:
public class DeviceInfo {
public string Model { get; set; }
public string Serial { get; set; }
}
public class DeviceManagerController : ApiController {
...
public string Post([FromBody]DeviceInfo info) {
...
}
}
以下是我在Android中构建JSON对象的方法:
URL url = new URL (url);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.setDoInput (true);
urlConn.setDoOutput (true);
urlConn.setUseCaches (false);
urlConn.setRequestProperty("Content-Type","application/json");
urlConn.connect();
// Send POST output.
JSONObject jsonParam = new JSONObject();
jsonParam.put("Model", "HP");
jsonParam.put("Serial", "1234");
DataOutputStream printout = new DataOutputStream(urlConn.getOutputStream ());
String jsonStr = jsonParam.toString();
String encodedStr = URLEncoder.encode(jsonStr,"UTF-8");
printout.writeChars(encodedStr);
printout.flush ();
printout.close ();
此代码成功调用Web服务。但是,参数(DeviceInfo)为空。
我甚至尝试直接传递jsonStr而不是先编码。但是,在这种情况下,虽然参数info
不再为null,但成员Model
和Serial
仍然为空。
我想知道是否还有其他错过的东西。问候。
答案 0 :(得分:0)
使用OutputStreamWriter
代替DataOutputStream
可以解决问题:
OutputStream os = urlConn.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8");
writer.write(jsonStr);
writer.close();
os.close();
答案 1 :(得分:-1)
这将花费你比你需要更多的时间和精力。使用一些外部json处理库,如Gson或Jackson。创建数据模型类,使用(JsonProperty注释)注释属性并生成适当的json String。 它可能会帮助您使用它们:
http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/
When is the @JsonProperty property used and what is it used for?