Main Content

complete

クラス: matlab.net.http.ResponseMessage
名前空間: matlab.net.http

応答ペイロードの Content-Type の処理または再処理

説明

msg = complete(msg) は、msg の Content-Type ヘッダー フィールドの現在の値を使用して msg.Body.Payload プロパティを msg.Body.Data に変換します。

msg = complete(msg,consumer) はメッセージのコピーを matlab.net.http.io.ContentConsumer で処理された msg.Body.Payload で返します。コンシューマーはその結果を msg.Body.Data に保存するか、他の方法で処理する場合があります。

次の場合に complete メソッドを使用します。

  • サーバーが正しくない Content-Type をメッセージに挿入したため、または Content-Type がなかったため、Body.Data が設定されなかった、または正しく設定されなかった。

  • データを最初に受信したときにデータが変換されないように ConvertResponseHTTPOptions.ConvertResponse プロパティを false に設定した。

  • メッセージの送信時に間違った consumer を指定した。

受信メッセージの処理中に例外が発生した場合、または要求の送信時に HTTPOptions.SavePayload プロパティを設定した場合、この応答メッセージの Body.Payload には、元のペイロードがあればこれが含まれます。この場合、このメッセージのヘッダーを変更して Content-Type フィールドを追加または訂正します。その後 complete メソッドを呼び出して、サーバーがその Content-Type フィールドを元々挿入していたかのように応答を処理します。結果として新しいコンテンツが指定の consumer で処理された Body.Data または Data の両方に設定されます。

Body.Payload が設定されている場合、このメソッドは Body.Data の現在の値を無視し、Content-Type に基づいてそのペイロードを処理します。これは、変換エラーのとき、または SavePayload を設定した場合に発生します。ただし、元の受信データの変換が正常に行われたものの正しくなかった場合、Body.Data が設定され、Body.Payload が空になることがあります。この場合、受信メッセージの ContentTypeField を希望のタイプに変更してこのメソッドを呼び出します。complete は、元の変換に使用された Body.ContentType プロパティに基づいてデータをペイロードに変換しなおそうとします。その後、応答メッセージの新しい Content-Type ヘッダーを使用して再変換されます。Data が空でない場合、返された Body.Payload が設定されます。

メッセージの送信時に SavePayload を指定した場合、complete は代わりに Body.Payload に保持された、情報が一切失われていない元のペイロードを使用します。

ResponseMessage.Completed プロパティが設定されている場合、complete は何も行いません。Body を含むメッセージでは、通常、msg.Body.Payload が設定されている場合にのみ、このプロパティが設定されます。

入力引数

すべて展開する

応答メッセージ。matlab.net.http.ResponseMessage オブジェクトとして指定します。

出力引数

すべて展開する

完了した応答メッセージ。matlab.net.http.ResponseMessage オブジェクトとして返されます。

すべて展開する

サーバーが JSON 文字列を含む応答を返したが、Content-Type に application/json ではなく text/plain が指定されているとします。この場合、Body.Payload は空で、msg.Body.Data には ASCII 文字列が含まれています (text/plain の既定の charset が us-ascii であるため)。このデータを処理して JSON 構造体を取得するには、次のようにします。

response = response.changeFields('Content-Type','application/json');
response = response.complete();
data = response.Body.Data;

complete を呼び出すと、us-ascii エンコードを使用して Body.DataBody.Payload に変換されます。次にメソッドは、Body.Payloadutf-8 に再変換してから、JSON 文字列として処理して結果を Body.Data に格納します。この変換は text/plain を使用して元のペイロードを変換したときに文字化けした非 ASCII 文字を保持しませんが、元の ASCII データを維持します。

バージョン履歴

R2016b で導入