자원 예외 및 오류에 대한 예외 맵퍼 정의

JAX-RS(Java™ API for RESTful Web Services) 애플리케이션은 예외 및 오류를 생성할 수 있습니다. 기본 동작은 JSP(JavaServer Pages) 오류 페이지와 같이 애플리케이션 컨테이너의 예외 처리 기능을 사용하는 것입니다. 그러나 예외 또는 오류가 발생한 경우 오류 처리를 사용자 정의하고 특정 응답을 다시 전송할 수 있습니다.

이 태스크 정보

Java 메소드와 같이 JAX-RS 자원 메소드는 확인된 예외 및 확인되지 않은 예외를 처리할 수 있습니다. 기본적으로 확인되지 않은 런타임 예외 또는 오류는 컨테이너에서 다시 발생합니다. 확인된 예외는 웹 컨테이너에서 실행 중인 자원에 대해 ServletException에 랩핑됩니다. 따라서 개발자는 JSP 오류 페이지와 같은 오류 처리 기능을 사용하여 JAX-RS 애플리케이션에서 발생한 예외를 처리할 수 있습니다.

JAX-RS에는 예외, javax.ws.rs.WebApplicationException이 도입되었습니다. 개발자는 WebApplicationException 작성 시 특정 오류 클래스 이름 또는 javax.ws.rs.core.Response 오브젝트를 지정할 수 있습니다. WebApplicationException이 발생하면 상태 클래스 이름 또는 응답 오브젝트 방식으로 예외에 포함된 정보를 사용하여 응답을 직렬화합니다.

코드에서 예외, WebApplicationException을 처리할 수 없고 웹 컨테이너에서 오류 처리 기능을 사용할 수 없지만 사용자 정의 오류 응답을 사용하려는 경우 사용자 정의된 JAX-RS javax.ws.rs.ext.ExceptionMapper 클래스를 작성하여 HTTP 오류 응답에 예외를 맵핑할 수 있습니다.

다음 프로시저는 사용자 정의 ExceptionMapper 클래스를 작성하는 방법을 보여줍니다.

프로시저

  1. javax.ws.rs.ext.ExceptionMapper 클래스를 구현하는 클래스를 작성하고 클래스에 javax.ws.rs.ext.Provider 어노테이션을 작성하십시오. 이 단계에서는 JAX-RS 자원이 해당 메소드에서 예외, MyCustomException을 처리할 수 있다고 가정합니다. 다음 예제는 단순한 ExceptionMapper 클래스를 보여줍니다.
    import javax.ws.rs.core.Response;
    import javax.ws.rs.ext.ExceptionMapper;
    import javax.ws.rs.ext.Provider;
    
    @Provider
    public class CustomExceptionMapper implements ExceptionMapper<MyCustomException> {
    
        public Response toResponse(MyCustomException exception) {
            		     return null;
        }
    
    }
  2. toResponse(MyCustomException) 메소드에서 사용자 정의된 오류 응답을 포함하는 Response 오브젝트를 리턴하십시오. 다음 예제는 사용자 정의된 ExceptionMapper.toResponse(MyCustomException) 메소드를 보여줍니다.
    @Provider
    public class CustomExceptionMapper implements ExceptionMapper<MyCustomException> {
    
        public Response toResponse(MyCustomException exception) {
            return Response.status(500).entity("Unfortunately, the application cannot
                process your request at this time.").type("text/plain").build();
        }
    
    }
    오류를 로깅하거나 발생한 예외를 검사하거나 보다 복잡한 논리를 사용하는 추가 코드를 보유할 수 있습니다.
  3. 웹 애플리케이션 프로젝트로 컴파일된 사용자 정의 ExceptionMapper 클래스를 패키지하십시오. 웹 애플리케이션에서 모든 JAX-RS 클래스를 찾기 위해 어노테이션 스캔 기능에 의존하는 경우 추가 단계는 필요하지 않습니다. 그러나 JAX-RS 애플리케이션 서브클래스 메소드에서 모든 관련 JAX-RS 자원 클래스 및 제공자를 리턴하는 경우 리턴된 세트에 사용자 정의 ExceptionMapper 클래스도 추가해야 합니다. 다음 예제에서는 기존의 javax.ws.rs.core.Application 서브클래스를 보여줍니다.
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.ws.rs.core.Application;
    
    public class MyApplication extends Application {
    
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> classes = new HashSet<Class<?>>();
            classes.add(CustomExceptionMapper.class);
            /* add your additional JAX-RS classes here */
            return classes;
        }
    }

    JAX-RS 자원 메소드에서 예외가 발생한 경우 사용자가 스택 추적 또는 잠재적으로 기밀 데이터를 볼 수 없도록 HTTP 오류 응답을 사용자 정의할 수 있습니다. 웹 컨테이너에서 ExceptionMapper 또는 예외 처리 기능을 사용하여 애플리케이션이 올바르게 작동하지 않는 경우 보다 유용한 응답을 제공합니다.

결과

JAX-RS 웹 애플리케이션에서 예외를 처리하도록 사용자 정의 ExceptionMapper를 작성했습니다.


주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_defresource_exception_mapper
파일 이름:twbs_jaxrs_defresource_exception_mapper.html