[java] Java Jersey에서 예외 처리를 위한 커스텀 예외 클래스 만드는 방법은?

Jersey는 Java에서 RESTful 웹 애플리케이션을 개발하기 위한 프레임워크입니다. 이 프레임워크를 사용하는 동안에는 예외 처리가 필요할 수 있습니다. 커스텀 예외 클래스를 만들어서 Jersey에서 이러한 예외를 처리하는 방법을 알아보겠습니다.

  1. 커스텀 예외 클래스 생성하기

Jersey에서는 예외를 처리하기 위해 WebApplicationException 클래스를 사용합니다. 이 클래스를 상속하여 커스텀 예외 클래스를 생성할 수 있습니다. 다음과 같이 커스텀 예외 클래스를 생성할 수 있습니다.

public class MyCustomException extends WebApplicationException {
    public MyCustomException(String message, int status) {
        super(Response.status(status).entity(message).build());
    }
}

위의 예제에서는 MyCustomException 클래스를 생성하고, messagestatus를 매개변수로 받아서 상위 클래스인 WebApplicationException의 생성자를 호출하여 예외를 처리합니다. 이때, Response.status 메소드를 사용하여 응답 상태 코드와 메시지를 설정합니다.

  1. 커스텀 예외 발생시키기

커스텀 예외를 발생시키기 위해서는 애플리케이션의 필요한 부분에서 throw 키워드를 사용하여 해당 예외를 발생시키면 됩니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

public class MyResource {
    public String getResource() {
        if (someCondition) {
            throw new MyCustomException("Invalid resource", Response.Status.BAD_REQUEST.getStatusCode());
        }
        // some code
    }
}

위의 예제에서는 getResource 메소드에서 someCondition의 값에 따라 예외를 발생시킵니다. 이때, MyCustomException 클래스를 사용하여 예외를 처리하며, 메시지와 상태 코드를 지정할 수 있습니다.

  1. 예외 처리하기

커스텀 예외가 발생하면, Jersey는 해당 예외를 처리하기 위해 애플리케이션의 예외 처리기를 호출합니다. 예외 처리기는 ExceptionMapper 인터페이스를 구현하여 작성할 수 있습니다. 다음은 예외 처리기를 작성하는 예제입니다.

@Provider
public class MyExceptionMapper implements ExceptionMapper<MyCustomException> {
    @Override
    public Response toResponse(MyCustomException exception) {
        return exception.getResponse();
    }
}

위의 예제에서는 MyExceptionMapper 클래스가 MyCustomException을 처리하기 위해 ExceptionMapper 인터페이스를 구현합니다. toResponse 메소드에서는 예외를 처리하고 응답을 반환합니다. 위의 예제에서는 단순히 예외에서 응답을 가져와서 반환하는 예제입니다.

이렇게 작성한 예외 처리기는 @Provider 어노테이션을 사용하여 JAX-RS 구현체에 의해 자동으로 인식됩니다.

이상으로 Java Jersey에서 커스텀 예외 클래스를 만들고 예외를 처리하는 방법을 알아보았습니다. 이를 통해 애플리케이션에서 예외를 세밀하게 처리하고 사용자에게 적절한 응답을 전달할 수 있습니다.