美文网首页
Retrofit注解使用

Retrofit注解使用

作者: 一只叫董董的程序猿 | 来源:发表于2017-12-04 15:46 被阅读0次

    仅供个人学习记录,未完待续

    常用retrofit注解方式的使用:

    1、get请求:
    @GET(……)
    使用@query或者@querymap进行注解

    Call<> getMsg(@Query(“name”) String name)
    Call<> getMsg(@QueryMap Map<String,String>params)
    

    假如你需要添加相同Key值,但是value却有多个的情况,一种方式是添加多个@Query参数,还有一种简便的方式是将所有的value放置在列表中,然后在同一个@Query下完成添加,实例代码如下:

    @GET("...")
        Call<> getSearchBooks(@Query("name") List<String> name);
    

    @Path
    @Get(…{user}..)
    使用path进行接收,组成完整url

    Call<> getMsg(@Path(“user”) String user)
    

    使用@Path时,path对应的路径不能包含”/”,否则会将其转化为%2F。在遇到想动态的拼接多节url时,还是使用@Url吧。
    2、post请求:
    使用@Field或者@FieldMap进行注解

    @FormUrlEnoded
    @POST
    Call getMsg(@Field(“pwd”) String pwd)
    Call getMsg(@FieldMap Map<String,String> params)
    

    3、传文件

    @Multipart
    @POST
    Call getMsg(@Part(“fileName”) RequestBody fileName,@Part MultipartBody.Part file)
    // 创建 RequestBody,用于封装构建RequestBody
    RequestBody pictureNameBody = 
    RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), “fileName");
    File file= new File(path);
    RequestBody requestFile =
    RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), file);
    // MultipartBody.Part is used to send also the actual file name
    MultipartBody.Part picturePart = MultipartBody.Part.createFormData(“file”, file.getName(), requestFile);
    
    
    

    4、传多个文件

    @Multipart
    @POST(“…“)
    Call create(@Part(“fileName") RequestBody fileName,@PartMap Map<String,RequestBody> files
    RequestBody fileNameBody = RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), fileName);
    File file= new File(path);
    RequestBody requestFile = RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), file);
    Map<String,RequestBody> params = new HashMap<>();
    params.put(“file\”; filename=\"" + file.getName() + "", requestFile);
    
    

    5、传入多个文件

    @Multipart
    @POST("hz/api/consultation")
    Flowable uploadFilesConsultation(@PartMap Map map,@Part List parts);
    final Map params = new HashMap<>();
    //以下参数是伪代码,参数需要换成自己服务器支持的
    params.put("token", convertToRequestBody(token));
    params.put("acceptPerson",convertToRequestBody(accpetPerson));
    List partList = filesToMultipartBodyParts(files);
    
     private RequestBody convertToRequestBody(String param) {
            RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), param);
            return requestBody;
        }
    
     private List<MultipartBody.Part> filesToMultipartBodyParts(List<PicAddModel> files) {
            List<MultipartBody.Part> parts = new ArrayList<>();
            for (PicAddModel file : files) {
                for (LocalMedia localMedia : file.getFiles()) {
                    File file1 = new File(localMedia.getPath());
                    RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), file1);
                    MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getType() + "", requestBody);
                    parts.add(part);
                }
            }
            return parts;
        }
    //.....调用接口
    

    6、@Header

    7、@Url 动态的url地址请求

    @GET
      Call<List<Repo>> listRepos(@Url String user);
    

    8、json

     @POST("api/FlyRoute/Add")  
       Call<FlyRouteBean> postFlyRoute(@Body RequestBody route);//传入的参数为RequestBody  
    RequestBody body=RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),route);  
    

    相关文章

      网友评论

          本文标题:Retrofit注解使用

          本文链接:https://www.haomeiwen.com/subject/blsxixtx.html