48.3. 애플리케이션의 응답 미세 조정


48.3.1. 응답 빌드의 기본 사항

48.3.1.1. 개요

RESTful 서비스는 리소스 메서드가 일반 Java 구성을 반환할 때 허용되는 것보다 더 정확한 응답을 소비자에 더 정확하게 제어해야 하는 경우가 많습니다. Cryostat-RS Response 클래스를 사용하면 리소스 메서드가 소비자에게 전송된 반환 상태를 일부 제어하고 응답에서 HTTP 메시지 헤더 및 쿠키를 지정할 수 있습니다.

응답 오브젝트는 소비자로 반환되는 엔티티를 나타내는 오브젝트를 래핑합니다. Response 개체는 ResponseBuilder 클래스를 팩토리로 사용하여 인스턴스화됩니다.

ResponseBuilder 클래스에는 응답의 메타데이터를 조작하는 데 사용되는 많은 메서드도 있습니다. 예를 들어 ResonseBuilder 클래스에는 HTTP 헤더 및 캐시 제어 지시문을 설정하기 위한 메서드가 포함되어 있습니다.

48.3.1.2. 응답과 응답 빌더 간의 관계

Response 클래스에는 보호된 생성자가 있으므로 직접 인스턴스화할 수 없습니다. Response 클래스로 묶은 ResponseBuilder 클래스를 사용하여 생성됩니다. ResponseBuilder 클래스는 생성된 응답에 캡슐화될 모든 정보의 소유자입니다. ResponseBuilder 클래스에는 메시지에서 HTTP 헤더 속성을 설정하는 모든 메서드가 있습니다.

Response 클래스는 적절한 응답 코드를 쉽게 설정하고 엔터티를 래핑하는 몇 가지 메서드를 제공합니다. 공통 응답 상태 코드 각각에 대한 메서드가 있습니다. 엔터티 본문 또는 필수 메타데이터를 포함하는 상태에 해당하는 메서드에는 해당 정보를 연결된 응답 빌더로 직접 설정할 수 있는 버전이 포함됩니다.

ResponseBuilder 클래스의 build() 메서드는 메서드가 호출될 때 응답 빌더에 저장된 정보가 포함된 응답 오브젝트를 반환합니다. 응답 오브젝트가 반환되면 응답 빌더가 clean 상태로 반환됩니다.

48.3.1.3. 응답 빌더 가져오기

응답 빌더를 가져오는 방법은 다음 두 가지가 있습니다.

  • Response 클래스를 사용하여 응답 빌더 가져오기 에 표시된 대로 Response 클래스의 정적 메서드를 사용합니다.

    Response 클래스를 사용하여 응답 빌더 가져오기

    import javax.ws.rs.core.Response;
    
    Response r = Response.ok().build();

    이러한 방식으로 응답 빌더를 가져올 때 여러 단계에서 조작할 수 있는 인스턴스에 액세스할 수 없습니다. 모든 작업을 단일 메서드 호출으로 문자열을 지정해야 합니다.

  • Apache CXF 특정 ResponseBuilderImpl 클래스 사용. 이 클래스를 사용하면 응답 빌더에서 직접 작업할 수 있습니다. 그러나 모든 응답 빌더 정보를 수동으로 설정해야 합니다.

    예 48.1. “ResponseBuilderImpl 클래스를 사용하여 응답 빌더 가져오기” ResponseBuilderImpl 클래스를 사용하여 Response 클래스를 사용하여 응답 빌더 가져오기 를 다시 작성하는 방법을 보여줍니다.

    예 48.1. ResponseBuilderImpl 클래스를 사용하여 응답 빌더 가져오기

    import javax.ws.rs.core.Response;
    import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;
    
    ResponseBuilderImpl builder = new ResponseBuilderImpl();
    builder.status(200);
    Response r = builder.build();
    참고

    Response 클래스의 메서드에서 ResponseBuilder 로 반환된 ResponseBuilder를 Response Builder 개체로 간단히 할당할 수도 있습니다.

48.3.1.4. 더 많은 정보

Response 클래스에 대한 자세한 내용은 Response 클래스의 Javadoc 을 참조하십시오.

ResponseBuilder 클래스에 대한 자세한 내용은 ResponseBuilder 클래스의 Javadoc 을 참조하십시오.

Apache CXF ResponseBuilderIml 클래스에 대한 자세한 내용은 ResponseBuilderImpl Javadoc.

48.3.2. 일반적인 사용 사례에 대한 응답 생성

48.3.2.1. 개요

Response 클래스는 RESTful 서비스에 필요한 더 일반적인 응답을 처리하기 위한 바로 가기 메서드를 제공합니다. 이러한 메서드는 제공된 값 또는 기본값을 사용하여 적절한 헤더 설정을 처리합니다. 또한 적절한 경우 엔티티의 채우기를 처리합니다.

48.3.2.2. 성공적인 요청에 대한 응답 생성

요청이 성공적으로 처리되면 애플리케이션은 요청이 충족되었음을 확인하는 응답을 보내야 합니다. 이 응답에는 엔티티가 포함될 수 있습니다.

응답을 성공적으로 완료할 때 가장 일반적인 응답은 OK 입니다. OK 응답에는 일반적으로 요청에 해당하는 엔티티가 포함됩니다. Response 클래스에는 응답 상태를 200 으로 설정하고 포함된 응답 빌더에 제공된 엔터티를 추가하는 오버로드된 ok() 메서드가 있습니다. ok() 메서드의 5 가지 버전이 있습니다. 가장 일반적으로 사용되는 변형은 다음과 같습니다.

  • response .ok()- status 200 및 빈 엔터티 본문으로 응답을 생성합니다.
  • response .ok(java.lang.Object 엔티티)- 200 상태의 응답을 생성하고, 제공된 오브젝트를 응답 엔티티 본문에 저장하고, 오브젝트를 인트로스펙션하여 엔터티 미디어 유형을 결정합니다.

200 응답으로 응답 생성 OK 상태로 응답을 생성하는 예를 보여줍니다.

200 응답으로 응답 생성

import javax.ws.rs.core.Response;
import demo.jaxrs.server.Customer;
...

Customer customer = new Customer("Jane", 12);

return Response.ok(customer).build();

요청자가 엔티티 본문을 원하지 않는 경우 200 OK 상태 대신 204 No Content 상태를 보내는 것이 더 적합할 수 있습니다. Response.noContent() 메서드는 적절한 응답 오브젝트를 생성합니다.

204 status로 응답 생성 204 상태의 응답을 생성하는 예를 보여줍니다.

204 status로 응답 생성

import javax.ws.rs.core.Response;

return Response.noContent().build();

48.3.2.3. 리디렉션을 위한 응답 생성

Response 클래스는 리디렉션 응답 상태 세 개를 처리하기 위한 메서드를 제공합니다.

303 기타 보기

303 Other 상태는 요청된 리소스가 요청을 처리하기 위해 소비자를 새 리소스로 영구적으로 리디렉션해야 하는 경우 유용합니다.

Response 클래스 seeOther() 메서드는 303 상태로 응답을 생성하고 메시지의 위치 필드에 새 리소스 URI를 배치합니다. seeOther() 메서드는 새 URI를 java.net.URI 오브젝트로 지정하는 단일 매개변수를 사용합니다.

Cryostat가 아닙니다.

Cryo stat Not Cryostat 상태는 요청의 특성에 따라 다양한 작업에 사용할 수 있습니다. 이전 GET 요청 이후 요청된 리소스가 변경되지 않았음을 나타내는 데 사용할 수 있습니다. 또한 리소스를 수정 요청으로 인해 리소스가 변경되지 않았음을 나타내는 데 사용할 수도 있습니다.

Response 클래스 not Cryostat() 메서드는 Cryostat 상태로 응답을 생성하고 HTTP 메시지에서 수정된 날짜 속성을 설정합니다. not Cryostat() 메서드의 세 가지 버전이 있습니다.

  • not Cryostat
  • notModifiedjavax.ws.rs.core.Entitytag
  • notModifiedjava.lang.Stringtag
307 임시 리디렉션

307 임시 리디렉션 상태는 요청된 리소스가 소비자를 새 리소스로 전달해야 하지만 소비자가 이 리소스를 계속 사용하여 향후 요청을 처리하기를 원하는 경우 유용합니다.

Response 클래스 temporaryRedirect() 메서드는 307 상태의 응답을 생성하고 새 리소스 URI를 메시지의 위치 필드에 배치합니다. temporaryRedirect() 메서드는 새 URI를 java.net.URI 오브젝트로 지정하는 단일 매개변수를 사용합니다.

Cryostat 상태로 응답 생성 Cryostat 상태로 응답을 생성하는 예를 보여줍니다.

Cryostat 상태로 응답 생성

import javax.ws.rs.core.Response;

return Response.notModified().build();

48.3.2.4. 신호 오류에 대한 응답 생성

Response 클래스는 두 가지 기본 처리 오류에 대한 응답을 생성하는 메서드를 제공합니다.

  • serverError-creates a response with a status of 500 Internal Server Error.
  • notcceptablejava.util.List<javax.ws.rs.core.Variant>변형- 허용 가능한 리소스 유형 목록을 포함하는 엔터티 본문 406 Not Acceptable 상태로 응답을 생성합니다.

500 status로 응답 생성 500 상태의 응답을 생성하는 예를 보여줍니다.

500 status로 응답 생성

import javax.ws.rs.core.Response;

return Response.serverError().build();

48.3.3. 고급 응답 처리

48.3.3.1. 개요

Response 클래스 메서드는 일반적인 사례에 대한 응답을 생성하기 위한 짧은 컷을 제공합니다. 캐시 제어 지시문을 지정하거나 사용자 지정 HTTP 헤더를 추가하거나 Response 클래스에서 처리되지 않은 상태를 보내는 등 더 복잡한 케이스를 처리해야 하는 경우 Response Builder 클래스 메서드를 사용하여 response () 메서드를 사용하여 응답 오브젝트를 생성하기 전에 응답을 채워야 합니다.

“응답 빌더 가져오기” 에서 설명한 대로 Apache CXF ResponseBuilderImpl 클래스를 사용하여 직접 조작할 수 있는 응답 빌더 인스턴스를 생성할 수 있습니다.

48.3.3.2. 사용자 정의 헤더 추가

사용자 지정 헤더는 ResponseBuilder 클래스의 header() 메서드를 사용하여 응답에 추가됩니다. header() 메서드는 다음 두 매개변수를 사용합니다.

  • name-a string that specifies the name of the header
  • value- 헤더에 저장된 데이터를 포함하는 Java 오브젝트

header() 메서드를 반복적으로 호출하여 메시지에 여러 헤더를 설정할 수 있습니다.

응답에 헤더 추가 응답에 헤더를 추가하기 위한 코드를 표시합니다.

응답에 헤더 추가

import javax.ws.rs.core.Response;
import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;

ResponseBuilderImpl builder = new ResponseBuilderImpl();
builder.header("username", "joe");
Response r = builder.build();

48.3.3.3. 쿠키 추가

사용자 지정 헤더는 ResponseBuilder 클래스의 cookie() 메서드를 사용하여 응답에 추가됩니다. cookie() 메서드는 하나 이상의 쿠키를 사용합니다. 각 쿠키는 javax.ws.rs.core.NewCookie 오브젝트에 저장됩니다. NewCookie 클래스의 컨트랙터 중 가장 쉬운에는 두 가지 매개변수가 필요합니다.

  • name- 쿠키 이름을 지정하는 문자열
  • value-a cookie 값을 지정하는 문자열

cookie() 메서드를 반복적으로 호출하여 여러 쿠키를 설정할 수 있습니다.

응답에 쿠키 추가 는 응답에 쿠키를 추가하기 위한 코드를 표시합니다.

응답에 쿠키 추가

import javax.ws.rs.core.Response;
import javax.ws.rs.core.NewCookie;

NewCookie cookie = new NewCookie("username", "joe");

Response r = Response.ok().cookie(cookie).build();

주의

null 매개 변수 목록을 사용하여 cookie() 메서드를 호출하면 이미 응답과 연결된 모든 쿠키가 지워집니다.

48.3.3.4. 응답 상태 설정

Response 클래스의 도우미 메서드에서 지원하는 상태 중 하나가 아닌 상태를 반환하려면 Response Builder 클래스의 status() 메서드를 사용하여 응답의 상태 코드를 설정할 수 있습니다. status() 메서드에는 두 가지 변형이 있습니다. 하나는 응답 코드를 지정하는 int 를 사용합니다. 다른 하나는 Response.Status 오브젝트를 사용하여 응답 코드를 지정합니다.

Response.Status 클래스는 Response 클래스로 묶은 열거입니다. 정의된 HTTP 응답 코드의 대부분에 대한 항목이 있습니다.

응답에 헤더 추가 404 Not Found 로 응답 상태를 설정하는 코드를 표시합니다.

응답에 헤더 추가

import javax.ws.rs.core.Response;
import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;

ResponseBuilderImpl builder = new ResponseBuilderImpl();
builder.status(404);
Response r = builder.build();

48.3.3.5. 캐시 제어 지시문 설정

ResponseBuilder 클래스의 cacheControl() 메서드를 사용하면 응답에서 캐시 제어 헤더를 설정할 수 있습니다. cacheControl() 메서드는 응답에 대한 캐시 제어 지시문을 지정하는 javax.ws.rs.CacheControl 개체를 사용합니다.

CacheControl 클래스에는 HTTP 사양에서 지원하는 모든 캐시 제어 지시문에 해당하는 메서드가 있습니다. 여기서 지시문은 setter 메서드에서 부울 값을 사용하는 단순한 값 또는 오프 값입니다. 지시문에 max-age 지시문과 같은 숫자 값이 필요한 경우 setter는 int 값을 사용합니다.

응답에 헤더 추가 no-store 캐시 제어 지시문을 설정하기 위한 코드를 표시합니다.

응답에 헤더 추가

import javax.ws.rs.core.Response;
import javax.ws.rs.core.CacheControl;
import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;

CacheControl cache = new CacheControl();
cache.setNoCache(true);

ResponseBuilderImpl builder = new ResponseBuilderImpl();
builder.cacheControl(cache);
Response r = builder.build();

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.