Swift + JSP + JSON实现服务器POST请求

来源:互联网 发布:vb 获取当月第一天 编辑:程序博客网 时间:2024/05/21 07:03

Swift中通过NSURLConnection来异步请求数据。

服务器通过JSP页面处理请求。

Swift代码如下,省略Connection的Delegate内容。

let urlPath: String = "Your_Address"var url = NSURL(string: urlPath)var request = NSMutableURLRequest(URL: url!)request.HTTPMethod = "POST"var dict=[  ["name":"neo1","from":"blog1.smemo.info"],  ["name":"neo2","from":"blog2.smemo.info"],  ["name":"neo3","from":"blog3.smemo.info"]]var jsonData = NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions.allZeros, error: nil)var str = NSString(data: jsonData!, encoding: NSUTF8StringEncoding)!var dataString = "key=\(str)&otherKeys=otherValues"let requestBodyData = (dataString as NSString).dataUsingEncoding(NSUTF8StringEncoding)request.HTTPBody = requestBodyDatavar connection = NSURLConnection(request: request, delegate: self, startImmediately: true)println("sending request...")connection!.start()

在POST请求的RequestBody中直接放入转换好的DataString,格式为“key1=value1&key2=value2&key3=value3”。

特别注意

var str = NSString(data: jsonData!, encoding: NSUTF8StringEncoding)!

最后的"!",如果没有"!"会使最后得到的JSON的String值带有Optional(...)。 那么服务器收到之后就无法直接将JSON的string parse成JSONObject了。而加了"!"相当于确认了存在NSString,从而String值中就不再带有Optional了。


JSP代码如下。

String body=request.getParameter("key");JSONArray array=(JSONArray)JSONValue.parse(body);JSONObject tempObj = (JSONObject)array.get(1);logger.debug("from "+tempObj.get("from"));
试了各种方式,还是直截了当的getParameter()最简单粗暴,试过其他的像是getInputStream和getReader,似乎都没能成功。


0 0
原创粉丝点击