Jersey統一異常處理


  眾所周知,java服務提供者提供給服務請求者應該是特定格式的數據,而不能出現異常棧類似信息,那么jersey中,如何添加統一的異常處理呢?

  針對jersey啟動如果是實現了ResourceConfig接口的實現類,可以注冊自定義的異常處理類。

/**
 * 功能說明:統一異常處理過濾器
 * @return <br/>
 *         修改歷史:<br/>
 *         1.[2016年09月09日上午11:11] 創建方法 by hw
 */
@Provider
public 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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM