Wie man rest-api-Aufruf mit HTTP PUT Methode in swift

Ich habe versucht die unten REST Api mit PUT Methode.

Hier ist mein 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()

Es nicht funktioniert. Bitte helfen Sie mir, um herauszufinden, wo es falsch ist.

  • Definiere ’nicht arbeiten‘
  • Die Beschreibung der Fehler, Analysiert Fehler: ‚Error Domain=NSURLErrorDomain Code=-1005 „Die Netzwerkverbindung wurde unterbrochen.“ UserInfo=0x7a7a8cc0 {NSErrorFailingURLStringKey=smapleurl, _kCFStreamErrorCodeKey=-4, NSErrorFailingURLKey=smapleurl, NSLocalizedDescription=Die Netzwerk-Verbindung wurde unterbrochen., _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x7a6f4520 „Der Vorgang konnte nicht abgeschlossen werden. (kCFErrorDomainCFNetwork Fehler -1005.)“}‘ Dieser Fehler tritt auf,
  • Es kann sein, ein Tippfehler, aber in Ihrer let url = NSURL(string: "http://sampleurl”) Ihre letzten ist nicht der richtige ".
  • nur eine Randnotiz, warum kommst du nicht mit POST anstelle von SETZEN? klingt wie Sie ‚ re posting einige Werte an den server
InformationsquelleAutor IOS developer | 2016-05-24



3 Replies
  1. 1

    Dies ist ein funktionierenden code, den ich senden Sie Ihr Wörterbuch als JSON-formatierten string an den server, und der server, ich parse die Anfrage und erstellen ein weiteres JSON-Objekt enthält die gleichen Werte wie die Anfrage, und senden Sie zurück zu der app. In der app, ich parse die Antwort aus und drucken Sie die Ergebnisse:

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

    Wenn Sie möchten, um zu versuchen, dies ist die Java-web-service-code:

    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();
        }
  2. 0

    Definieren Sie die put-Funktion wie folgt :

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

    Ein Beispiel für die Verwendung :

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

    Versuchen, diese!!!

    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()
    
    }
    • Ich habe zu nennen-api mit put-Methode. Ja, bitte senden Sie Api-Aufruf mit Http PUT Methode
    • der Entwickler gab ich den Hinweis, wie es funktioniert, so tun die nach-unten-Abstimmung denken, bevor Sie auf, dass und probieren Sie selbst
    • OP fragte nach einem SETZEN, nicht ein BEITRAG

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.