2016-05-24 1 views
-1

J'ai essayé ci-dessous REST Api avec la méthode PUT.Comment faire appel api de repos avec la méthode HTTP PUT dans swift

Voici mon code,

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() 

Il ne fonctionne pas. Aidez-moi s'il vous plaît à trouver où c'est faux.

+3

Définir 'ne fonctionne pas' – Wain

+0

Description de l'erreur Analysée erreur: 'Error Domain = NSURLErrorDomain Code = -1005 "La connexion réseau a été perdue." UserInfo = 0x7a7a8cc0 {NSErrorFailingURLStringKey = http: // smapleurl, _kCFStreamErrorCodeKey = -4, NSErrorFailingURLKey = http: // smapleurl, NSLocalizedDescription = La connexion réseau a été perdue., _kCFStreamErrorDomainKey = 4, NSUnderlyingError = 0x7a6f4520 "L'opération n'a pas pu aboutir. (kCFErrorDomainCFNetwork error -1005.) "} ' Cette erreur se produit –

+0

Il peut s'agir d'une faute de frappe mais dans votre' let url = NSURL (string: "http: // sampleurl") 'votre dernier' '' n'est pas le bon '" '. – Chajmz

Répondre

0

définit la fonction de vente comme ceci:

// 
// 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)) 
     }) 
    } 
} 

Un exemple d'utilisation:

// 
    // 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

Essayez cette !!!

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

Je dois appeler api avec la méthode put. Alors s'il vous plaît envoyez Api appel avec Http PUT méthode –

+0

@ IOS développeur J'ai donné l'indice comment cela fonctionne, faire le vote vers le bas réfléchir avant cela et essayer soi-même –

+0

OP a demandé un PUT, pas un POST – ablarg

1

Ceci est un code de travail, j'envoyer votre dictionnaire comme une chaîne au format JSON au serveur, et le serveur, je Parse la demande et construire un autre objet JSON qui contient les mêmes valeurs comme la demande, et les renvoyer à l'application. Dans l'application, je parse la réponse et imprimer les résultats:

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") 
      } 

Si vous voulez essayer, cela est le code de service Web 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(); 
    }