将JSON数据发布到iOS的Java Web服务

时间:2014-02-05 08:09:44

标签: java ios objective-c json afnetworking-2

我正在尝试从iOS应用程序将简单文本或名称作为json发送到我的java Web服务,但遗憾的是没有运气。这是我的iOS POST代码如下:

- (IBAction)cmdRegister:(id)sender {    
    AFSecurityPolicy *policy = [[AFSecurityPolicy alloc] init];
    [policy setAllowInvalidCertificates:YES];

    AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager];
    [operationManager setSecurityPolicy:policy];
    operationManager.requestSerializer = [AFJSONRequestSerializer serializer];
    operationManager.responseSerializer = [AFJSONResponseSerializer serializer];

    [operationManager POST:@"http://localhost:8080/com.webservice/rest/status/member/"
                parameters:@{@"name":@"john"}
                success:^(AFHTTPRequestOperation *operation, id responseObject) {
                       NSLog(@"JSON: %@", [responseObject description]);
                   }
                   failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                       NSLog(@"Error: %@", [error description]);
                   }
     ];     
}

这是我的java web服务方法:

@POST
@Path("/member/{name}")
@Consumes(MediaType.APPLICATION_JSON)
public Response addNewCustomer(@PathParam("name") String name) throws Exception {
  String returnString=null;
  MemberDAO dao = new MemberDAO();
  try{
      ObjectMapper mapper = new ObjectMapper();  
      Customer customer =mapper.readValue(name, Customer.class);

      //add to database the passed in params
      int returnCode =dao.insertMembers(name);

      //return the success or failure
      if(returnCode ==200){
        returnString ="Member has been added";
      } else {
        return Response.status(500).entity("Unable to process member    registration").build();
      }

  } catch(Exception ex) {
    ex.printStackTrace();
  }

  return Response.ok(returnString).build();
}
运行此操作,因为没有错误,也没有数据库更新。我搜索过并发现了类似的帖子,但没有任何线索请帮助。

我不确定我做错了什么。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我可以在iOS部分帮助你。但我不知道你是否编写了java服务器代码(我认为使用JBoss)是正确的。

您向我展示代码并尝试此代码(iOS):

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *strURL = @"http://YOUR_IP:YOUR_PORT/YOUR_PATH/../../..";

    AFHTTPRequestOperationManager *manager     = [AFHTTPRequestOperationManager manager];
    AFJSONRequestSerializer *serializerRequest = [AFJSONRequestSerializer serializer];
    [serializerRequest setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

    AFJSONResponseSerializer *serializerResponse = [AFJSONResponseSerializer serializer];
    serializerResponse.readingOptions = NSJSONReadingAllowFragments;
    serializerResponse.acceptableContentTypes = [NSSet setWithObject:@"application/json"];

    manager.requestSerializer = serializerRequest;
    manager.responseSerializer = serializerResponse;

    UIImage *image = [UIImage imageNamed:@"SIMPLE_IMAGE.png"];
    NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];

    NSDictionary *parameters = @{@"name":@"Jhon"};
    [manager POST:strURL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFormData:imageData name:@"photo"];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        strResultResponse = operation.responseString;
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        strResultResponse = operation.responseString;
    }];
}

此代码发送到服务器,参数字符串和nsdata(图像)。你适应你的代码并尝试运行。 对不起,如果没有多大帮助的话。祝你好运。

答案 1 :(得分:0)

AFHTTPRequestOperationManager * operationmanager = [AFHTTPRequestOperationManager manager];

AFJSONRequestSerializer *serializerRequest = [AFJSONRequestSerializer serializer];

[serializerRequest setStringEncoding:NSUTF8StringEncoding];

 operationmanager.requestSerializer = serializerRequest;

operationmanager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"text/html", nil];

[operationmanager POST:getCategoryPath parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

}];