61.5. 클라이언트 응답 필터
61.5.1. 개요
이 섹션에서는 클라이언트 측에서 들어오는 응답 메시지를 가로채는 데 사용되는 클라이언트 응답 필터 를 구현하고 등록하는 방법을 설명합니다. 클라이언트 응답 필터는 클라이언트 측의 모든 종류의 일반 응답 처리에 사용할 수 있습니다.
61.5.2. ClientResponseFilter 인터페이스
javax.ws.rs.client.ClientResponseFilter
인터페이스는 다음과 같이 정의됩니다.
// Java package javax.ws.rs.client; ... import java.io.IOException; public interface ClientResponseFilter { void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException; }
ClientResponseFilter
를 구현하면 클라이언트 측에서 ClientResponse
확장 포인트에 대한 필터를 생성하여 서버에서 수신한 후 응답 메시지를 필터링할 수 있습니다.
61.5.3. ClientResponseContext 인터페이스
ClientResponseFilter
의 필터
방법은 javax.ws.rs.client.ClientRequestContext
유형의 인수와 javax.ws.rs.client.ClientResponseContext
형식의 인수와 발신 응답 메시지 및 관련 메타데이터에 액세스하는 데 사용할 수 있는 두 가지 인수를 수신합니다. “ClientRequestContext 인터페이스”
ClientResponseContext
인터페이스는 다음과 같이 정의됩니다.
// Java ... package javax.ws.rs.client; import java.io.InputStream; import java.net.URI; import java.util.Date; import java.util.Locale; import java.util.Map; import java.util.Set; import javax.ws.rs.core.EntityTag; import javax.ws.rs.core.Link; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.NewCookie; import javax.ws.rs.core.Response; public interface ClientResponseContext { public int getStatus(); public void setStatus(int code); public Response.StatusType getStatusInfo(); public void setStatusInfo(Response.StatusType statusInfo); public MultivaluedMap<String, String> getHeaders(); public String getHeaderString(String name); public Set<String> getAllowedMethods(); public Date getDate(); public Locale getLanguage(); public int getLength(); public MediaType getMediaType(); public Map<String, NewCookie> getCookies(); public EntityTag getEntityTag(); public Date getLastModified(); public URI getLocation(); public Set<Link> getLinks(); boolean hasLink(String relation); public Link getLink(String relation); public Link.Builder getLinkBuilder(String relation); public boolean hasEntity(); public InputStream getEntityStream(); public void setEntityStream(InputStream input); }
61.5.4. 샘플 구현
ClientResponse
확장 포인트(즉, 서버에서 응답 메시지를 수신한 후 필터가 실행되는 클라이언트 응답 필터)를 구현하려면 ClientResponseFilter
인터페이스를 구현하는 클래스를 정의합니다.
예를 들어 다음 코드는 priority가 20인 ClientResponse
확장 지점에 설치된 간단한 클라이언트 응답 필터의 예를 보여줍니다.
// Java package org.jboss.fuse.example; import javax.ws.rs.client.ClientRequestContext; import javax.ws.rs.client.ClientResponseContext; import javax.ws.rs.client.ClientResponseFilter; import javax.annotation.Priority; @Priority(value = 20) public class SampleClientResponseFilter implements ClientResponseFilter { public SampleClientResponseFilter() { System.out.println("SampleClientResponseFilter starting up"); } @Override public void filter( ClientRequestContext requestContext, ClientResponseContext responseContext ) { // Add an extra header on the response responseContext.getHeaders().putSingle("MyCustomHeader", "my custom data"); } }
61.5.5. 클라이언트 응답 필터 등록
JAX-RS 2.0 클라이언트 API를 사용하여 javax.ws.rs.client.Client
오브젝트 또는 javax.ws.client. WebTarget 오브젝트에 클라이언트
응답 필터를 직접 등록할 수 있습니다. 효과적으로는 클라이언트 요청 필터를 선택적으로 다른 범위에 적용할 수 있으므로 필터의 특정 URI 경로만 영향을 받습니다.
예를 들어 다음 코드는 SampleClientResponseFilter
필터를 등록하는 방법을 보여주므로 client
개체를 사용하여 수행된 모든 호출에 적용됩니다.
// Java ... import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; ... Client client = ClientBuilder.newClient(); client.register(new SampleClientResponseFilter());