前提・実現したいこと
SwiftUIと、Django REST Frameworkを利用してiOSアプリを開発しています。
データ更新用のエンドポイントにPUT method
でアクセスし、対象のデータを更新したいのですが、下記のエラーメッセージ(DRF
のresponse
データに含まれる)が出て、更新作業ができません。
対応の方法について、ご存知の方おりましたらご教授いただけないでしょうか?
コンソールに表示されるエラーメッセージ
The response code is 415 The request is: ["detail": リクエストのメディアタイプ "" はサポートされていません。]
該当のソースコード
SWIFT
1func makePutCall( 2 pk the_pk:Int, 3 field_name the_field_name:String, 4 memo the_memo:String 5 ) { 6 let pk = the_pk 7 let endpoint: String = "https://sample.com/api/info/(pk)/" 8 9 guard let url = URL(string: endpoint) else { 10 print("Error: cannot create URL") 11 return 12 } 13 var urlRequest = URLRequest(url: url) 14 urlRequest.addValue("token xxxxxxxxxxxxxxxxxxx", forHTTPHeaderField: "authorization") 15 urlRequest.httpMethod = "PUT" 16 urlRequest.httpBody = "field_name=(the_field_name)&memo=(the_memo)".data(using: .utf8) 17 let session = URLSession.shared 18 let task = session.dataTask(with: urlRequest) { 19 (data, response, error) in 20 guard error == nil else { 21 print("error calling PUT") 22 print(error!) 23 return 24 } 25 guard let responseData = data else { 26 print("Error: did not receive data") 27 return 28 } 29 guard let response = response as? HTTPURLResponse else { 30 print("Error: did not response data") 31 return 32 } 33 print("The response code is (response.statusCode)") 34 do { 35 guard let receivedData = try JSONSerialization.jsonObject(with: responseData, 36 options: []) as? [String: Any] else { 37 print("Could not get JSON from responseData as dictionary") 38 return 39 } 40 print("The request is: " + receivedData.description) 41 42 } catch { 43 print("error parsing response from PUT") 44 return 45 } 46 } 47 task.resume() 48 }
試したこと
Content-Type
の指定をするために下記のようにコードを編集すると、エラーメッセージは変わりますが、更新はできません。
...中略 var urlRequest = URLRequest(url: url) urlRequest.addValue("token xxxxxxxxxxxxxxxx", forHTTPHeaderField: "authorization") urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type") //←この行を追加 urlRequest.httpMethod = "PUT" ...中略
コンソールに表示されるエラーメッセージ
The response code is 400 The request is: ["detail": JSON parse error - Expecting value: line 1 column 1 (char 0)]
補足情報(FW/ツールのバージョンなど)
Xcode:Version 12.0.1
DjangoRESTframework: 3.12.1
Django:3.1.2
あなたの回答
tips
プレビュー