统一处理jersey的异常

一般我们的api接口最好统一返回一些错误码,使用Json封装错误码和相应的消息,我们可以使用一下的方式来实现异常的统一处理。

第一步:定义一个继承自RuntimeException的异常类,封装错误码和相应的消息。

public class ClientResponseException extends RuntimeException{
    private int resultCode = ClientApiConstant.ResultCode.FAILED;
    private Object data = null;
    public ClientResponseException(int resultCode,String message,Object data){
        super(message);
        this.resultCode = resultCode;
        this.data = data;
    }
    public ClientResponseException(String message){
        super(message);
    }
    /**
     * @return the resultCode
     */
    public int getResultCode(){
        return resultCode;
    }
    /**
     * @param returnCode the resultCode to set
     */
    public void setresultCode(int resultCode){
        this.resultCode = resultCode;
    }
    /**
     * @return the data
     */
    public Object getData(){
        return data;
    }
    /**
     * @param data the data to set
     */
    public void setData(Object data){
        this.data = data;
    }
    
}

第二步:在resources目录下建立ExceptionMapper的实现类,处理上面定义的异常,添加javax.ws.rs.ext.Provider注解,这样jersey就能自动发现该类。

@Provider
public class ExceptionMapperSupport implements ExceptionMapper<Exception>{

    @Override
    public Response toResponse(Exception exception){
        exception.printStackTrace();
        if(exception instanceof ClientResponseException){
            ClientResponseException xx = (ClientResponseException)exception;
            JSONObject object = new JSONObject();
            object.put(ClientApiConstant.Key.RESULT_CODE, xx.getResultCode());
            object.put(ClientApiConstant.Key.MESSAGE, xx.getMessage());
            object.put(ClientApiConstant.Key.DATA,xx.getData());
            return Response.ok(JSON.toJSONString(object, true), MediaType.APPLICATION_JSON).build();
        }else {
            JSONObject object = new JSONObject();
            object.put(ClientApiConstant.Key.RESULT_CODE, ClientApiConstant.ResultCode.FAILED);
            object.put(ClientApiConstant.Key.MESSAGE,ClientApiConstant.Msg.FAIL);
            return Response.ok(JSON.toJSONString(object, true), MediaType.APPLICATION_JSON).build();
        }
    }

}

第三步:在resource方法中直接抛出上面定义的 ClientResponseException 异常

@POST
@Path("exception")
public String exception(){
    //在需要抛出异常的时候
    throw new ClientResponseException(1000,"messagge","额外数据");
}

返回的结果

{
"Message":"messagge",
"Data":"额外数据",
"ResultCode":1000
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值