首页 > 代码库 > Jersey统一异常处理

Jersey统一异常处理

  众所周知,java服务提供者提供给服务请求者应该是特定格式的数据,而不能出现异常栈类似信息,那么jersey中,如何添加统一的异常处理呢?

  针对jersey启动如果是实现了ResourceConfig接口的实现类,可以注册自定义的异常处理类。

/** * 功能说明:统一异常处理过滤器 * @return <br/> *         修改历史:<br/> *         1.[2016年09月09日上午11:11] 创建方法 by hw */@Providerpublic class ExceptionHandler implements ExceptionMapper<Exception> {    @Override    public Response toResponse(Exception e) {        BaseResponse response = new BaseResponse();        if (e instanceof SuperException) {            SuperException exp = (SuperException) e;            response.setErrCode(exp.getCode());            response.setMsg(exp.getMessage());        } else {            response.setErrCode(ErrorsDiscriptor.InvalidAuthCode.code());            response.setMsg(ErrorsDiscriptor.InternalService.message());        }        return Response.ok().entity(response).build();    }}

  在启动类中,需要将该类注册进rest中,jersey启动过程中会自动加载ExceptionHandler类,在调用者请求rest接口时,如果抛出异常,则由ExceptionHandler进行异常捕获并统一处理约定格式错误信息给调用者

@ApplicationPath("/rest")public class MyApplication extends ResourceConfig {    /**     * MyApplication 构造方法     */    public MyApplication() {        // 初始化Resource,以指定包的形式初始化,多个包之间以分号隔开        packages("com.timevale.esign.openapi.tech.resource");        // packages("com.timevale.esign.openapi.tech.opensvc.resource");        register(ExceptionHandler.class);        // 注册spring filter        register(RequestContextFilter.class);        // 注册数据转换器,支持传参和返回信息json格式与bean之间的自动转换        register(JacksonJsonProvider.class);        // 注册支持multipart-formdata格式的请求        register(org.glassfish.jersey.media.multipart.MultiPartFeature.class);        // 初始化数据库        EnvironmentInitializer.instance().initOnce();    }}

  第二种方式,如果是以web.xml中配置jersey-spring的servlet实现的这种方式,指定jersey扫描自定义的ExceptionHandler所在的包即可,ExceptionHandler的实现同上。

<servlet>        <servlet-name>jersey-spring</servlet-name>        <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>        <init-param>            <param-name>com.sun.jersey.config.property.packages</param-name>            <param-value>cn.tsign.www.openapi.rest.resource;cn.tsign.www.openapi.rest.filter</param-value>        </init-param>        <init-param>            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>            <param-value>true</param-value>        </init-param>        <load-on-startup>2</load-on-startup>    </servlet>

 

Jersey统一异常处理