RestEasy + Java EE 애플리케이션이 있습니다. 구성 요소 클래스에 @GZIP을 추가하면 클라이언트가 "accepts : gzip"을 보내면 server-answer가 gzip으로됩니다.일반적으로 GZIP 사용 가능
일반적으로 모든 구성 요소에 gzip을 사용할 수 있습니까? 모든 클래스에 주석을 추가하고 싶지 않습니다.
내가 RESTEasy가 JAX-RS
RestEasy + Java EE 애플리케이션이 있습니다. 구성 요소 클래스에 @GZIP을 추가하면 클라이언트가 "accepts : gzip"을 보내면 server-answer가 gzip으로됩니다.일반적으로 GZIP 사용 가능
일반적으로 모든 구성 요소에 gzip을 사용할 수 있습니까? 모든 클래스에 주석을 추가하고 싶지 않습니다.
내가 RESTEasy가 JAX-RS
없음 3.0.1를 사용하고, 모든 자원에 대한 GZIP을 가능하게 주석 방법이 없습니다. 어노테이션을 모든 클래스에 추가하지 않으려면 수신 헤더를보고 서둘러 응답을 gzips하는 서블릿 필터를 만들 수 있습니다.
사용자 정의 JAX-RS 2.0 필터와 인터셉터를 사용하여 이것을 수행 할 수 있으며 방법을 알면 특별히 어렵지 않습니다. 당신이해야 할 것들
주석에 대한 하지 검사가 인코딩을 지원하기 위해 존재하는 것으로 않도록 GZIP의 기존 수정하는 필터를 추가, 그것은 단지 수락-Encoding 헤더를 찾습니다 . RESTEasy가 GZIP 인코딩 구현 방법에
당신은 항상이 존재 주석의 관계없이 GZIP 필터를 추가하는 방법 configure(ResourceInfo resourceInfo, FeatureContext configurable)
이 기능을 추가해야 할 것입니다. 서버용 사용자 정의 필터와 클라이언트 용 필터를 등록하는 기능이 하나 필요합니다.
기존의 GZIP 인터셉터 은으로 나머지 작업을 수행해야합니다.
필자는 사용자 정의 압축 필터를 만들기 위해 유사한 메커니즘을 사용했습니다 (범위를 제한하기 위해 주석으로 적용되도록 설정 했음에도 불구하고).
@BobMcGee에 동의합니다. 모든 요청을 압축하는 자체 DynamicFeature를 작성할 수 있습니다. 여기에 모든 요청을 압축하는 샘플 코드는 다음과 같습니다
import static java.util.Arrays.asList;
import java.util.HashSet;
import javax.ws.rs.ConstrainedTo;
import javax.ws.rs.RuntimeType;
import javax.ws.rs.container.DynamicFeature;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.WriterInterceptor;
import org.jboss.resteasy.plugins.interceptors.encoding.ServerContentEncodingAnnotationFilter;
@Provider
@ConstrainedTo(RuntimeType.SERVER)
public class CompressionFeature implements DynamicFeature {
private WriterInterceptor compressionFilter = new ServerContentEncodingAnnotationFilter(new HashSet<>(asList("gzip")));
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
final Class<?> declaring = resourceInfo.getResourceClass();
context.register(compressionFilter);
}
}
참고 : CompressionFeature은 org.jboss.resteasy.plugins.interceptors.encoding.ServerContentEncodingAnnotationFeature을 기반으로합니다.
인터페이스 뒤에 API를 구현하면 모든 인터페이스가 하나의 인터페이스에서 상속 될 수 있으므로 "BaseAPI"는 이고 BaseAPI에 @Gzip을 설정하면 논리적으로 모든 사람에게 Content-Encoding이 적용됩니다. 상속 된 인터페이스 및 메서드.
@GZIP
public interface BaseAPI
{
}
public interface APIX extends BaseAPI
{
@GET
Response getSomething() {
}
이 또한 무거워 보이는 경우에는'Logger' 인스턴스와'declaring' 로컬 변수를 삭제할 수 있습니다. 이것은 실제로 몇 줄에 불과합니다. 그리고 매력처럼 작동합니다! –