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가 설정되어 있으면 complete 메서드는 Body.Data의 현재 값을 무시하고 Content-Type을 기반으로 하여 페이로드를 처리합니다. 변환 오류가 발생하거나 SavePayload를 지정해 둔 경우에도 마찬가지입니다. 그러나, 수신 데이터에 대한 변환이 처음에는 성공했으나 잘못된 경우에는 Body.Data가 설정되고 Body.Payload는 비어 있을 수 있습니다. 이런 경우에는 수신된 메시지에 있는 ContentTypeField를 원하는 유형으로 변경한 후 complete 메서드를 호출하십시오. 그러면 이 메서드는 처음에 데이터를 변환하는 데 사용된 Body.ContentType 속성을 기반으로 데이터를 페이로드로 다시 변환하려 시도하게 됩니다. 그런 후, 메시지는 응답 메시지에 포함된 새 Content-Type 헤더를 사용하여 다시 변환됩니다. Data가 비어 있지 않으면 반환된 Body.Payload가 설정됩니다.

메시지를 전송할 때 SavePayload를 지정해 두면, 정보 손실 없이 Body.Payload에 유지된 원래 페이로드를 complete는 대신 사용하게 됩니다.

ResponseMessage.Completed 속성이 설정된 경우 complete는 아무 동작도 하지 않습니다. Body를 포함하는 메시지에서 이 속성은 일반적으로 msg.Body.Payload가 설정된 경우에만 설정됩니다.

입력 인수

모두 확장

응답 메시지로, matlab.net.http.ResponseMessage 객체로 지정됩니다.

출력 인수

모두 확장

완료된 응답 메시지로, matlab.net.http.ResponseMessage 객체로 반환됩니다.

예제

모두 확장

서버가 JSON 문자열을 포함하는 응답을 반환했지만 Content-Type 필드를 application/json이 아니라 text/plain으로 지정했다고 가정합니다. text/plain의 디폴트 문자 집합은 us-ascii이기 때문에 이 경우, Body.Payload는 비어 있게 되며 msg.Body.Data는 ASCII 문자열을 포함하게 됩니다. 이 데이터를 처리하고 JSON 구조체를 가져오려면 다음을 수행하십시오.

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

complete에 대한 호출은 us-ascii 인코딩을 사용하여 Body.DataBody.Payload로 변환합니다. 그런 다음 이 메서드는 Body.Payload를 JSON 문자열로 처리하고 Body.Data에 결과를 저장하기 전에 utf-8로 다시 변환합니다. 이 변환에서는 text/plain을 사용하여 원래 페이로드를 변환할 때 모양이 일그러진 비ASCII 문자는 유지하지 않지만, 원래 ASCII 데이터는 유지합니다.

버전 내역

R2016b에 개발됨