50.2. WebApplicationException 예외를 보고서에 사용

            errors
indexterm:[WebApplicationException]

50.2.1. 개요

JAX-RS API는 리소스 메서드가 RESTful 클라이언트가 사용할 수 있는 적절한 예외를 생성하는 쉬운 방법을 제공하기 위해 WebApplicationException 런타임 예외를 도입했습니다. WebApplicationException 예외는 요청의 originator로 반환할 엔티티 본문을 정의하는 Response 개체를 포함할 수 있습니다. 엔터티 본문이 제공되지 않는 경우 클라이언트에 반환되는 HTTP 상태 코드를 지정하는 메커니즘도 제공합니다.

50.2.2. 간단한 예외 생성

WebApplicationException 예외를 만드는 가장 쉬운 방법은 WebApplicationException 예외에서 원래 예외를 래핑하는 인수 생성자 또는 생성자를 사용하는 것입니다. 두 생성자 모두 빈 응답이 있는 WebApplicationException을 만듭니다.

이러한 생성자 중 하나에 의해 생성된 예외가 발생하면 런타임은 비어 있는 엔터티 본문과 상태 코드 500 Server Error 와 함께 응답을 반환합니다.

50.2.3. 클라이언트에 반환되는 상태 코드 설정

500 이외의 오류 코드를 반환하려는 경우 상태를 지정할 수 있는 4개의 WebApplicationException 생성자 중 하나를 사용할 수 있습니다. 예 50.1. “상태 코드를 사용하여 WebApplicationException 생성” 에 표시된 두 개의 생성자 중 두 개는 반환 상태를 정수로 사용합니다.

예 50.1. 상태 코드를 사용하여 WebApplicationException 생성

WebApplicationException상태WebApplicationExceptionjava.lang.Throwablecauseintstatus

예 50.2. “상태 코드를 사용하여 WebApplicationException 생성” 에 표시된 나머지 두 개는 response .Status 인스턴스로 응답 상태를 사용합니다.

예 50.2. 상태 코드를 사용하여 WebApplicationException 생성

WebApplicationExceptionjavax.ws.rs.core.Response.Status상태WebApplicationExceptionjava.lang.Throwablecausejavax.ws.rs.core.Response.Status상태

이러한 생성자 중 하나에서 만든 예외가 throw되면 런타임은 비어 있는 엔터티 본문 및 지정된 상태 코드와 함께 응답을 반환합니다.When an exception created by either of these constructors is thrown, the runtime returns a response with an empty entity body and the specified status code.

50.2.4. 엔터티 본문 제공

예외와 함께 메시지를 보내려면 Response 개체를 사용하는 WebApplicationException 생성자 중 하나를 사용할 수 있습니다. 런타임은 Response 오브젝트를 사용하여 클라이언트에 전송된 응답을 생성합니다. 응답에 저장된 엔터티는 메시지의 엔터티 본문에 매핑되고 응답의 상태 필드는 메시지의 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. “WebApplicationException 확장” 예 50.3. “예외를 사용하여 메시지 전송” 에서 코드와 유사한 응답을 생성하는 새로운 예외를 보여줍니다.

예 50.4. 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.");