码迷,mamicode.com
首页 > 其他好文 > 详细

Jersey 异常处理

时间:2015-06-10 15:58:19      阅读:452      评论:0      收藏:0      [点我收藏+]

标签:

    在默认情况下,jersey处理业务层抛出的异常,生成http的500状态码,不会针对不同的异常生成不同的状态码。

    jersey处理异常,主要有两种方式。

1、实现javax.ws.rs.ext.ExceptionMapper<T>,T为所要抛出的异常类型。当jersey捕获到T异常,就返回实现类的响应。

当抛出RuntimeException异常,就会返回404异常。需要注意的是:实现类要加@Provider注解,而且要放在jersey资源所在的包路径,以便jersey扫描到。

@Provider
public class Exception404Mapper implements ExceptionMapper<RuntimeException> {
    @Override
    public Response toResponse(RuntimeException e) {
        return Response.status(404).entity(e.getMessage())
                .type(MediaType.TEXT_PLAIN).build();
    }
}

2、继承javax.ws.rs.WebApplicationException,当然也可以直接抛出WebApplicationException,不过得到的是默认的500错误状态码。这里定义了401异常状态码。这样jersey捕获到ParameterException异常,将会返回http 401错误状态码。

public class ParameterException extends WebApplicationException {
    private static final long serialVersionUID = 1L;

    public ParameterException() {
        super(Response.status(401).entity("参数异常").type(MediaType.TEXT_PLAIN)
                .build());
    }

    public ParameterException(String msg) {
        super(Response.status(401).entity(msg).type(MediaType.TEXT_PLAIN)
                .build());
    }
}

  测试如下:wr是com.sun.jersey.api.client.WebResource。使用junit的fail(),我们就可以确定代码的执行流程。

    /**
     * 测试404错误状态码
     */
    @Test
    public void test404Exception() {
        try {
            wr.path("exception").get(Response.class);
            fail();
        } catch (UniformInterfaceException e) {
            ClientResponse response = e.getResponse();
            response.getStatus();
            assertEquals(404, response.getStatus());
        } catch (ClientHandlerException e) {
            fail();
        }
    }

    /**
     * 测试401错误状态码
     */
    @Test
    public void testWebApplicationException() {
        try {
            wr.path("exception/webApplicationException").get(Response.class);
            fail();
        } catch (UniformInterfaceException e) {
            ClientResponse response = e.getResponse();
            response.getStatus();
            assertEquals(401, response.getStatus());
        } catch (ClientHandlerException e) {
            fail();
        }
    }


Jersey的使用,请看Jersey

Jersey测试,请看JerseyTest



Jersey 异常处理

标签:

原文地址:http://my.oschina.net/u/2007041/blog/465101

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!