# restlib **Repository Path**: TracyRose/restlib ## Basic Information - **Project Name**: restlib - **Description**: android客户端使用的rest接口解析库,支持服务端json数据自动转换本地模型。使用注解定制request - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2019-03-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # restlib android客户端使用的rest接口解析库,支持服务端json数据自动转换本地模型。使用注解定制request **使用方法** 1. 创建AbsCall子类,AbsCall是接口请求的核心处理类,通过对请求接口注解解析,内部创建完整的http请求格式,并为其子类提供公共参数 定制接口,以适应项目中对head,url中公共参数的定制化。同时提供respFilter方法重写,实现对response数据的预处理渠道。 public class MyCall extends AbsCall { protected void addCommonQuery(){ setQueryNameAndValue("deviceid",deviceId); setQueryNameAndValue("appid",APP_ID); } protected void addCommonHead(){ setHeadNameAndValue("User-Agent", "MHA-AL00,MHA-AL00,Android 7.0,WIFI"); setHeadNameAndValue("AUTH", ""); } @Override protected String getBaseUrl() { return "http://api.xxx.com/v1.0/"; } @Override protected void respFilter(String result) { try { JSONObject jsonObject = new JSONObject(result); int status = jsonObject.optInt("Status"); if (status == 200 ){ super.respFilter(jsonObject.opt("Result").toString()); }else{ doError(status+"",jsonObject.optJSONObject("Result").optString("ErrorMsg")); } } catch (JSONException e) { e.printStackTrace(); doError(RestStatus.HTTP_UNDEFINE.value()+"",e.getMessage()); } } } 2. 创建Rest接口定义 public interface RestApi { @GET("Story/StoryVersion/getRecommendList") @Cache(policy = "OutlineFirst",time = 1) MyCall test6( @Query("offset")String offset , @Query("limit")String limit , @Query("test")String test , @Head("auth")String auth , RestCallback> restCallback); @POST("Center/Story/uploadMp3") @Multipart MyCall upload( @Field("sid")String sid , @Field("title")String title , @FileField("mp3")String mp3Path , RestCallback restCallback); @POST("Passport/{User}/loginByCode") MyCall login(@Field("mobile")String username,@Field("code")String pass,@Path("{User}")String User, RestCallback restCallback); } 3. 接口调用 final RestApi api = (RestApi) new Rest().create(this, MyCall.class,RestApi.class); api.login("18684692111", "888888", "User", new RestCallback() { @Override public void error(String code, String errorMsg) { } @Override public void sccesss(LoginReturn s) { Log.e(this.getClass().getSimpleName(),s.getUserNick()); } } ); 4.注解说明 @POST 方法注解,定义http请求为POST请求 @GET 方法注解,定义http请求为GET请求 @Multipart 方法注解,定义http请求为上传,配合POST使用 @Cache 方法注解,定义当前请求的缓存策略 @Head 参数注解,设置Head参数 @Path 参数注解,设置替换url中占位符参数 @Field 参数注解,设置post请求中的表单参数 @FileField 参数注解,设置文件上传请求中的文件本地地址参数 5.缓存说明 本框架提供三种缓存策略 1. OutlineFirst离线数据优先,如果未过期,直接使用离线数据,不请求线上数据。 2. OnlineFirst线上数据优先,保持使用线上数据,同时更新缓存备用。如果网络失败,使用离线数据。 3. Both 同时使用,先预览离线数据,再更新线上数据,同时更新缓存。 例如:@Cache(policy = "OutlineFirst",time = 1) 使用策略为离线数据优先,过期时间为1分钟,其中time单位为分钟