49.4. 요청 및 응답 구문 분석


49.4.1. 개요

HTTP 호출을 수행하는 데 중요한 측면은 클라이언트가 발신 요청 메시지와 들어오는 응답을 구문 분석할 수 있어야 한다는 것입니다. Cryostat-RS 2.0에서 키 개념은 미디어 유형으로 태그된 원시 메시지를 나타내는 Entity 클래스입니다. 원시 메시지를 구문 분석하려면 특정 Java 유형으로 미디어 유형을 변환 할 수있는 기능이 있는 여러 엔터티 공급자 를 등록할 수 있습니다.

즉, Cryostat-RS 2.0의 컨텍스트에서 Entity 는 원시 메시지의 표현이며 엔터티 공급자는 원시 메시지를 구문 분석하는 기능을 제공하는 플러그인입니다( media 유형 기반).

49.4.2. 엔터티

엔터티 는 메타데이터(media type, language, encoding)에 의해 보강된 메시지 본문입니다. 엔터티 인스턴스는 메시지를 원시 형식으로 보유하고 있으며 특정 미디어 유형과 연결되어 있습니다. Entity 개체의 내용을 Java 개체로 변환하려면 지정된 미디어 유형을 필수 Java 유형에 매핑할 수 있는 엔터티 공급자가 필요합니다.

49.4.3. 변형

javax.ws.rs.core.Variant 오브젝트는 다음과 같이 엔터티 와 연결된 메타데이터를 캡슐화합니다.

  • 미디어 유형,
  • 언어,
  • 인코딩.

효과적으로 EntityVariant 메타데이터로 보강한 HTTP 메시지 콘텐츠로 구성할 수 있습니다.

49.4.4. 엔터티 공급자

엔터티 공급자는 미디어 유형과 Java 유형 간의 매핑 기능을 제공하는 클래스입니다. 효과적으로 엔터티 공급자를 특정 미디어 유형(또는 여러 미디어 유형)의 메시지를 구문 분석하는 기능을 제공하는 클래스로 생각할 수 있습니다. 엔티티 공급자의 두 가지 유형이 있습니다.

MessageBodyReader
미디어 유형에서 Java 유형으로 매핑할 수 있는 기능을 제공합니다.
MessageBodyWriter
Java 유형에서 미디어 유형으로 매핑할 수 있는 기능을 제공합니다.

49.4.5. 표준 엔티티 공급자

다음 Java 및 미디어 유형 조합에 대한 엔터티 공급자는 표준으로 제공됩니다.

byte[]
모든 미디어 유형( */* ).
java.lang.String
모든 미디어 유형( */* ).
java.io.InputStream
모든 미디어 유형( */* ).
java.io.Reader
모든 미디어 유형( */* ).
java.io.File
모든 미디어 유형( */* ).
javax.activation.DataSource
모든 미디어 유형( */* ).
javax.xml.transform.Source
XML 유형(텍스트/xml,application/xmlapplication/*+xml형식의 미디어 유형).
javax.xml.bind.JAXB Cryostat 및 application-supplied CryostatB 클래스
XML 유형(텍스트/xml,application/xmlapplication/*+xml형식의 미디어 유형).
MultivaluedMap<String,String>
양식 콘텐츠(application/x-www-form-urlencoded).
StreamingOutput
모든 미디어 유형(*/*), MessageBodyWriter 만 해당합니다.
java.lang.Boolean,java.lang.Character,java.lang.Number
텍스트/설명만 사용할 수 있습니다. boxing/unboxing 변환을 통해 지원되는 해당 기본 유형.

49.4.6. 응답 오브젝트

기본 반환 유형은 입력되지 않은 응답을 나타내는 javax.ws.rs.core.Response 유형입니다. Response 오브젝트는 메시지 본문, HTTP 상태, HTTP 헤더, 미디어 유형 등을 포함하여 전체 HTTP 응답에 대한 액세스를 제공합니다.

49.4.7. 응답 상태 액세스

HTTP 상태 코드를 반환하는 getStatus 메서드를 통해 응답 상태에 액세스할 수 있습니다.

int status = resp.getStatus();

또는 getStatusInfo 메서드에서 설명 문자열도 제공합니다.

String statusReason = resp.getStatusInfo().getReasonPhrase();

49.4.8. 반환된 헤더 액세스

다음 메서드 중 하나를 사용하여 HTTP 헤더에 액세스할 수 있습니다.

MultivaluedMap<String,Object>
getHeaders()

MultivaluedMap<String,String>
getStringHeaders()

String
getHeaderString(String name)

예를 들어 응답에 Date 헤더가 있음을 알고 있는 경우 다음과 같이 액세스할 수 있습니다.

String dateAsString = resp.getHeaderString("Date");

49.4.9. 반환된 쿠키 액세스

다음과 같이 getCookies 방법을 사용하여 응답에 설정된 모든 새 쿠키를 액세스할 수 있습니다.

import javax.ws.rs.core.NewCookie;
...
java.util.Map<String,NewCookie> cookieMap = resp.getCookies();
java.util.Collection<NewCookie> cookieCollection = cookieMap.values();

49.4.10. 반환된 메시지 콘텐츠에 액세스

Response 오브젝트에서 readEntity 메서드 중 하나를 호출하여 반환된 메시지 콘텐츠에 액세스할 수 있습니다. readEntity 메서드는 사용 가능한 엔티티 공급자를 자동으로 호출하여 메시지를 요청된 유형으로 변환합니다( readEntity의 첫 번째 인수로 지정됨). 예를 들어 메시지 콘텐츠에 문자열 유형으로 액세스하려면 다음을 수행합니다.

String messageBody = resp.readEntity(String.class);

49.4.11. 컬렉션 반환 값

반환된 메시지에 Java 일반 유형(예: List 또는 Collection 유형)으로 액세스해야 하는 경우 javax.ws.rs.core.GenericType<T > 구성을 사용하여 요청 메시지 유형을 지정할 수 있습니다. 예를 들면 다음과 같습니다.

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Client;
import javax.ws.rs.core.GenericType;
import java.util.List;
...
GenericType<List<String>> stringListType = new GenericType<List<String>>() {};

Client client = ClientBuilder.newClient();
List<String> bookNames = client.target("http://example.org/bookstore/booknames")
                     .request("text/plain")
                     .get(stringListType);
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.