[java] JAX-RS 예외 처리

JAX-RS (Java API for RESTful Web Services)는 Java에서 RESTful 웹 서비스를 구축하기 위한 API입니다. JAX-RS를 사용하여 개발하다보면 예외 처리가 필요한 경우가 있습니다. 이 블로그 포스트에서는 JAX-RS에서 예외 처리하는 방법을 살펴보겠습니다.

예외 처리 방법

JAX-RS에서 예외 처리는 javax.ws.rs.ext.ExceptionMapper를 구현하여 수행할 수 있습니다. ExceptionMapper는 예외를 처리하여 응답을 생성하는 역할을 수행합니다.

예를 들어, NotFoundException이 발생했을 때 클라이언트에게 적절한 응답을 전달하기 위해 다음과 같이 NotFoundExceptionMapper 클래스를 작성할 수 있습니다.

import javax.ws.rs.NotFoundException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> {
    
    @Override
    public Response toResponse(NotFoundException ex) {
        return Response.status(Response.Status.NOT_FOUND)
                .entity("Resource not found")
                .build();
    }
}

위의 코드에서 @Provider 어노테이션은 JAX-RS에게 이 클래스가 Provider로 사용될 것임을 알려줍니다. ExceptionMapper를 구현한 클래스를 Provider로 등록해서 JAX-RS가 예외를 처리할 수 있도록 해야합니다.

toResponse 메소드는 예외가 발생할 경우 호출되며, 해당 예외에 대한 적절한 응답을 생성하여 반환합니다.

위의 예제에서는 NotFoundException이 발생하면 404 응답을 생성하고 “Resource not found”라는 메시지를 응답 엔티티에 포함시킵니다.

예외 처리 적용하기

예외 처리를 사용하려면 JAX-RS 애플리케이션의 구성 클래스에서 Application 클래스를 상속하고 @ApplicationException 어노테이션을 이용하여 예외를 발생시킨 리소스에 적용해야합니다.

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/api")
public class MyApplication extends Application {
}

위의 코드에서 @ApplicationPath 어노테이션은 JAX-RS 애플리케이션의 루트 경로를 설정합니다.

결론

JAX-RS에서 예외 처리는 ExceptionMapper를 구현하는 방식으로 처리할 수 있습니다. ExceptionMapper를 사용하면 예외 발생 시 적절한 응답을 생성하여 클라이언트에 전달할 수 있습니다.