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 或者设置不正确。

  • 您将 ConvertResponse HTTPOptions.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

如果您在发送消息时指定了 SavePayloadcomplete 将改用 Body.Payload 中保留的原始有效负载,不会丢失任何信息。

如果设置了 ResponseMessage.Completed 属性,则 complete 不会执行任何操作。在包含 Body 的消息中,通常只有设置了 msg.Body.Payload 时,才会设置此属性。

输入参数

全部展开

响应消息,指定为 matlab.net.http.ResponseMessage 对象。

输出参数

全部展开

已完成的响应消息,以 matlab.net.http.ResponseMessage 对象形式返回。

示例

全部展开

假定服务器返回包含 JSON 字符串的响应,但指定的 Content-Type 字段为 text/plain,而不是 application/json。在这种情况下,Body.Payload 为空,而 msg.Body.Data 中包含一个 ASCII 字符串(因为 text/plain 的默认字符集为 us-ascii)。要处理此数据并获取 JSON 结构体:

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

complete 的调用使用 us-ascii 编码方式将 Body.Data 转换为 Body.Payload。然后,在将 Body.Payload 作为 JSON 字符串进行处理并将结果存储在 Body.Data 中之前,此方法会先将它转换为 utf-8。此转换不会保留使用 text/plain 转换原始有效负载时显示为乱码的任何非 ASCII 字符,但会保留原始 ASCII 数据。

版本历史记录

在 R2016b 中推出