JAX-RSをやってみる (6) - 例外処理 -

2014-06-13T00:00:00+00:00 Java JAX-RS

んまぁJAX-RSアプリケーション上における例外処理な所を

WebApplicationExceptionを使う

WebApplicationExceptionを使えばまぁ普通に引数にステータスコード指定したりだとかで

package sample.controller;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

//import static javax.ws.rs.core.MediaType.*;

@Path("/sample")
public class Home {

    @GET
    public String index() {
        throw new WebApplicationException(Response.Status.BAD_REQUEST);
    }
}

な感じでWebApplicationExceptionな例外でぶっ飛ばせば

package sample.controller;

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

import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;

import sample.SampleApplication;

import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;

public class HomeTest extends JerseyTest {

    @Override
    protected Application configure() {
        return new SampleApplication();
    }

    @Test
    public void test_index() {
        Response response = target("/sample").request().get();
        assertThat(response, notNullValue());
        assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST.getStatusCode()));
    }
}

てなことになるので

独自例外をResponseに変換するExceptionMapperを使う

package sample.controller;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Path("/sample")
public class Home {

    @GET
    public String index() {
        throw new SampleException();
    }

    public static class SampleException extends RuntimeException {
    }

    // @Providerするか自明的にregisterしておけば良い
    @Provider
    public static class SampleExceptionMapper implements ExceptionMapper<SampleException> {
        @Override
        public Response toResponse(SampleException exception) {
            return Response.status(Response.Status.BAD_REQUEST).build();
        }
    }
}

てな感じで上記のWebApplicationExceptionセクションで書いてるテストをそのまま動かしてテストがコケないかを確認

JAX-RSをやってみる (7) - Reader & Writer interceptor - JAX-RSをやってみる (5) - CDI -