2016-05-24 4 views
-1

Я пробовал ниже REST Api с помощью метода PUT.Как сделать вызов api для отдыха с помощью метода HTTP PUT в swift

Вот мой код,

let url = NSURL(string: "http://sampleurl") 

let request = NSMutableURLRequest(URL: url!) 

request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 

request.HTTPMethod = "PUT" 

let session = NSURLSession(configuration:NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: nil, delegateQueue: nil) 

let params:[String: AnyObject] = ["deviceId" : "device_1","mobileDeviceId" : "abcd","deviceType":"ios"] 

request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions(), error: nil) 

let dataTask = session.dataTaskWithRequest(request) { (data, response, error) -> Void in 

     if error != nil { 

      //handle error 

      print("Parsed error: '\(error)'") 
     } 
     else { 

      let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("Parsed JSON: '\(jsonStr)'") 
     } 
    } 
dataTask.resume() 

Это не работает. Пожалуйста, помогите мне узнать, где это неправильно.

+3

Определение «не работает» – Wain

+0

Описание ошибки разобранные ошибка: «Ошибка домена = NSURLErrorDomain Code = -1005» Сетевое соединение было потеряно ». UserInfo = 0x7a7a8cc0 {NSErrorFailingURLStringKey = http: // smapleurl, _kCFStreamErrorCodeKey = -4, NSErrorFailingURLKey = http: // smapleurl, NSLocalizedDescription = Сетевое соединение было потеряно., _kCFStreamErrorDomainKey = 4, NSUnderlyingError = 0x7a6f4520 «Операция не может быть завершена. (kCFErrorDomainCFNetwork error -1005.) "} ' Эта ошибка возникает –

+0

Это может быть опечатка, но в вашем' let url = NSURL (строка: «http: // sampleurl») 'your last' '' не является правильным '" '. – Chajmz

ответ

0

Определим функцию пут, как это:

// 
// Put request 
// 
static func put(path: String, accessToken: Bool, data: Dictionary<String, AnyObject>, finish: (accessTokenX:String, data: JSON) ->()) { 
    apiRequest("PUT", path: path, accessToken: accessToken, contentType: nil, data: data) { (accessTokenX:String, data: AnyObject) in 
     dispatch_async(dispatch_get_main_queue(), { 
      finish(accessTokenX:accessTokenX, data: JSON(data)) 
     }) 
    } 
} 

Пример использования:

// 
    // Update informations of the profile 
    // 
    static func accountUpdate(profile: [String: AnyObject], finish: (accessTokenX:String, data: JSON) ->()) { 
     let dataProfile = ["profile": profile] 
     API.put("https://stackoverflow.com/users/profile", accessToken: true, data: dataProfile) { accessTokenX, data in finish(accessTokenX:accessTokenX, data: data) 
     } 
    } 
-2

Попробуйте !!!

http://jamesonquave.com/blog/making-a-post-request-in-swift/

func data_request() 
{ 
    let url:NSURL = NSURL(string: url_to_request)! 
    let session = NSURLSession.sharedSession() 

    let request = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 
    request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData 

    let paramString = "data=Hello" 
    request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding) 

    let task = session.dataTaskWithRequest(request) { 
    (
     let data, let response, let error) in 

     guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { 
      print("error") 
      return 
     } 

     let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print(dataString) 

    } 

    task.resume() 

} 
+0

Мне нужно вызвать api с помощью метода put. Поэтому, пожалуйста, отправьте вызов Api с помощью метода Http PUT –

+0

@IOS разработчик Я дал подсказку, как это работает, так что давайте подумаем об этом раньше и попробуем самостоятельно –

+0

OP запросил PUT, а не POST – ablarg

1

Это рабочий код, я посылаю свой словарь в JSON отформатированной строки на сервер, и на сервере, я разобрать запрос и построить еще один объект JSON, который содержит то же значение, как запрос, и отправить их обратно в приложение. В приложении, я анализирую ответ и распечатать результаты:

let session = NSURLSession.sharedSession() 
      let url = "http://localhost:8080/yourServerGoesHere/putMethodTest" 
      let request = NSMutableURLRequest(URL: NSURL(string: url)!) 
      request.HTTPMethod = "PUT" 

      let params:[String: AnyObject] = ["deviceId" : "device_1","mobileDeviceId" : "abcd","deviceType":"ios"] 
      do{ 
       request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions()) 
       let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in 
        if let response = response { 
         let nsHTTPResponse = response as! NSHTTPURLResponse 
         let statusCode = nsHTTPResponse.statusCode 
         print ("status code = \(statusCode)") 
        } 
        if let error = error { 
         print ("\(error)") 
        } 
        if let data = data { 
         do{ 
         let jsonData = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) 
         let deviceId = jsonData["deviceId"] as! String 
         let mobileDeviceId = jsonData["mobileDeviceId"] as! String 
         let deviceType = jsonData["deviceType"] as! String 
         print (" deviceId= \(deviceId), mobileDeviceId= \(mobileDeviceId), deviceType= \(deviceType)") 
         }catch _ { 
          print ("the response is not well JSON formatted") 
         } 
        } 
       }) 
       task.resume() 
      }catch _ { 
       print ("Oops something happened buddy") 
      } 

Если вы хотите попробовать, это Java-код веб-службы:

import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
@Path("/putMethodTest") 
    @PUT 
    @Consumes(MediaType.TEXT_PLAIN) 
    public Response putMethodTest(String requestString) { 
     JSONObject requestJSON = new JSONObject(requestString); 
     String deviceId = requestJSON.getString("deviceId"); 
     String mobileDeviceId = requestJSON.getString("mobileDeviceId"); 
     String deviceType = requestJSON.getString("deviceType"); 
     JSONObject response = new JSONObject(); 
     response.put("deviceId", deviceId); 
     response.put("mobileDeviceId", mobileDeviceId); 
     response.put("deviceType", deviceType); 
     return Response.ok().entity(response.toString()).build(); 
    }