您的位置:首页 > 编程语言 > Java开发

iOS客户端发送json数据,java(servlet)服务器接受json数据

2017-07-25 13:48 519 查看

背景:

我们平时用Get方式发送http请求到服务器,服务器用request.getParameter(“xxx”)方法可以直接拿到值。用POST方式也是,可以直接拿到值,虽然Post方式前面只有服务器地址,参数是在Body部分,java服务器依然可以request.getParameter(“xxx”)的方式获取对应的值。实际开发中,后台给的接口各式各样,现在遇到iOS客户端发送json格式数据,java服务器接受iOS端传来的json格式数据。

iOS端实现思路:

iOS
端既然要传
json
格式的数据,必然会封装成
OC
字典。熟悉
json
格式的人都知道,
json
的大括号就是对应
OC
字典,而
json
的小括号对应
OC
的数组。

第一步,
iOS
端肯定要把所有要传的值全部封装成
OC
字典的格式。

第二步,把封装好的
OC
字典通过
NSJSONSerialization
转化成
NSData


第三步,把得到的
NSData
再转成
NSString
类型。

以上三步,说白了就是把要传输的值转成
NSString
类型来传。那么,
java
服务器自然就是字符串的形式来接收即可。

iOS端参考代码:

NSDictionary *jsonDict = @{@"stallInfo":@[
@{@"stallName":stallName,@"shopOneName":shopOneName,@"shopOneDes":shopOneDes,@"shopTwoName":shopTwoName,@"shopTwoDes":shopTwoDes}],
@"longtitude":longtitude,
@"latitude":latitude
};

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

[PublicAPI requestForPitchParam:jsonString callback:^(id obj) {

}];


+(void)requestForPitchParam:(id)param callback:(ZFCallBack)callback
{
NSString *path = @"http://192.168.1.101:8080/MoveStall/pitch";

NSMutableURLRequest *request = [PublicAPI setupURLRequestAndPath:path param:param requestMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[PublicAPI httpSession:request success:^(id responseOjb) {
callback(responseOjb);
} failure:^(NSError *error) {
callback(error.localizedDescription);
}];
}


+(NSMutableURLRequest *)setupURLRequestAndPath:(NSString *)path param:(id)param requestMethod:(NSString *)requestMethod
{
path = [path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString:path];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
request.timeoutInterval = 30;
request.HTTPMethod = requestMethod;
return request;
}


+(void)httpSession:(NSMutableURLRequest *)urlRequest success:(void(^)(id responseOjb))success failure:(void(^)(NSError *))failure
{
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
failure(error);
}
else
{
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
success(dict);
}
}] resume];
}


Java服务器实现思路:

上面,已经阐述过了
iOS
端实际是发送字符串,那么
Java
服务器以接受字符串的方式来接收即可。而在这里,
Java
服务器采用
servlet
来编写。

Java服务器参考代码:

/**
* 获取请求的 body
* @param req
* @return
* @throws IOException
*/
public static String getRequestBody(HttpServletRequest req) throws IOException {
BufferedReader reader = req.getReader();
String input = null;
StringBuffer requestBody = new StringBuffer();
while((input = reader.readLine()) != null) {
requestBody.append(input);
}
return requestBody.toString();
}


/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");

response.setCharacterEncoding("utf-8");

String jsonString = getRequestBody(request);
System.out.println(jsonString);

JSONObject jsonObj = JSONObject.fromObject(jsonString);
System.out.println(jsonObj);
}


Java
服务器接收到
Json
格式数据后,可以通过
JsonObject
JsonArray
类来转化,方便取出里面的值。这里就不再赘述,读者可自行百度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息