统一处理jersey的异常

来源:互联网 发布:单片机与微机的区别 编辑:程序博客网 时间:2024/04/28 11:07

一般我们的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就能自动发现该类。

@Providerpublic 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 0
原创粉丝点击