Red Hat Training

A Red Hat training course is available for Red Hat Fuse

48.3.3. 더 많은 고급 응답 처리

48.3.3.1. 개요

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

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

48.3.3.2. 사용자 정의 헤더 추가

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

  • name- 헤더 이름을 지정하는 문자열입니다.
  • 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 클래스의 contructors의 가장 쉬운 방법은 두 가지 매개 변수를 사용합니다.

  • name- 쿠키 이름을 지정하는 문자열입니다.
  • value- 쿠키 값을 지정하는 문자열입니다.

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 를 가져옵니다.Gets an int that specifies the response code. 다른 하나는 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 메서드에서 부울 값을 사용하는 간단한 on 또는 off 값입니다. 지시문에 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();