50.2. WebApplicationException을 사용하여 보고
errors indexterm:[WebApplicationException]
50.2.1. 개요
Cryostat-RS API는 리소스 메서드에서 RESTful 클라이언트가 사용할 수 있는 예외를 쉽게 생성할 수 있도록 WebApplicationException 런타임 예외를 도입했습니다. WebApplicationException 예외에는 요청 출처로 돌아가기 위해 엔터티 본문을 정의하는 Response
오브젝트가 포함될 수 있습니다. 또한 엔터티 본문이 제공되지 않는 경우 HTTP 상태 코드를 클라이언트에 반환하는 메커니즘을 제공합니다.
50.2.2. 간단한 예외 생성
WebApplicationException 예외를 생성하는 가장 쉬운 방법은 인수 생성자나 WebApplicationException 예외에서 원래 예외를 래핑하는 생성자를 사용하는 것입니다. 두 생성자 모두 빈 응답이 있는 WebApplicationException을 생성합니다.
이러한 생성자 중 하나에 의해 생성된 예외가 발생하면 런타임에서 빈 엔터티 본문과 상태 코드가 500 Server Error
인 응답을 반환합니다.
50.2.3. 클라이언트에 반환되는 상태 코드 설정
500
이외의 오류 코드를 반환하려면 상태를 지정할 수 있는 네 가지 WebApplicationException 생성자 중 하나를 사용할 수 있습니다. 예 50.1. “상태 코드를 사용하여 WebApplicationException 생성” 에 표시된 이러한 생성자 중 두 개는 반환 상태를 정수로 가져옵니다.
예 50.1. 상태 코드를 사용하여 WebApplicationException 생성
WebApplicationException
int
status
WebApplicationException
java.lang.Throwable
의 경우
int
예 50.2. “상태 코드를 사용하여 WebApplicationException 생성” 에 표시된 다른 두 개는 응답 상태를 Response.Status
인스턴스로 가져옵니다.
예 50.2. 상태 코드를 사용하여 WebApplicationException 생성
WebApplicationException
javax.ws.rs.core.Response.Status
상태
WebApplicationException
java.lang.Throwable
원인
javax.ws.rs.core.Response.Status
상태
이러한 생성자 중 하나에 의해 생성된 예외가 발생하면 런타임에서 빈 엔터티 본문 및 지정된 상태 코드가 있는 응답을 반환합니다.
50.2.4. 엔터티 본문 제공
예외와 함께 메시지를 보내려면 Response
개체를 사용하는 WebApplicationException 생성자 중 하나를 사용할 수 있습니다. 런타임은 Response
오브젝트를 사용하여 클라이언트에 전송된 응답을 생성합니다. 응답에 저장된 엔티티는 메시지의 엔티티 본문에 매핑되고 응답의 status 필드는 메시지의 HTTP 상태에 매핑됩니다.
예 50.3. “예외를 사용하여 메시지 전송” 예외 이유가 포함된 클라이언트에 텍스트 메시지를 반환하고 HTTP 메시지 상태를 409 Conflict
로 설정하는 코드를 표시합니다.
예 50.3. 예외를 사용하여 메시지 전송
import javax.ws.rs.core.Response; import javax.ws.rs.WebApplicationException; import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl; ... ResponseBuilderImpl builder = new ResponseBuilderImpl(); builder.status(Response.Status.CONFLICT); builder.entity("The requested resource is conflicted."); Response response = builder.build(); throw WebApplicationException(response);
50.2.5. 일반 예외 확장
WebApplicationException 예외를 확장할 수 있습니다. 이를 통해 사용자 정의 예외를 생성하고 일부 보일러 플레이트 코드를 제거할 수 있습니다.
예 50.4. “Extending WebApplicationException” 예 50.3. “예외를 사용하여 메시지 전송” 에서 코드와 유사한 응답을 생성하는 새 예외를 표시합니다.
예 50.4. Extending WebApplicationException
public class ConflicteddException extends WebApplicationException { public ConflictedException(String message) { ResponseBuilderImpl builder = new ResponseBuilderImpl(); builder.status(Response.Status.CONFLICT); builder.entity(message); super(builder.build()); } } ... throw ConflictedException("The requested resource is conflicted.");