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 클래스에 대한 자세한 내용은
클래스의 Javadoc 을 참조하십시오.
ResponseBuilder
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()
- status200
및 빈 엔터티 본문으로 응답을 생성합니다. -
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
-
notModified
javax.ws.rs.core.Entity
tag
-
notModified
java.lang.String
tag
-
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 of500 Internal Server Error
. -
notcceptable
java.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 Response
Builder()
메서드를 사용하여 응답 오브젝트를 생성하기 전에 응답을 채워야 합니다.
“응답 빌더 가져오기” 에서 설명한 대로 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
Builderstatus()
메서드를 사용하여 응답의 상태 코드를 설정할 수 있습니다. 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();