()转换为String 并进行URL编码,使用该注解定义的参数,参数值可以为空,为空时,忽略该值,当传入一个List或array时,为每个非空item拼接请求键值对,所有的键是统一的,如:name=张三...编码,当参数值为null是=时,会自动忽略,如果传入的是一个List或者array,则为每一个非空的item拼接一个键值对,每一个键值对中的键是相同的,值就是非空的item的值。...如:name=张三&name=李四&name=王五,如果itme的值有空格,在拼接的时候会自动忽略,例如某个item的值为:张 三,则拼接后为name=张三。...为空时,则忽略。...同理,Retrofit会判断@Part的参数类型,如果参数为okhttp3.MultipartBody.Part,则Retrofit会把RequestBody封装成MultipartBody,再把Part
@Query和@QueryMap 作用:用于 @GET 方法的查询参数(Query = Url 中 ‘?’...,@GET传入的URL就可以省略 // 当GET、POST...HTTP等方法中没有设置Url时,则必须使用 {@link Url}提供 } 汇总 步骤4:创建 Retrofit 实例...// Retrofit把网络请求的URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里 // 如果接口里的url是一个完整的网址,那么放在Retrofit对象里的URL...doctype 值是 xml,则去除该值,若 doctype 值是 json,该值为空即可 // xmlVersion:如果 doctype 值是 json,则去除该值,若 doctype 值是 xml...,该值为空即可 // type:语言自动检测时为 null,为 null 时可为空。
@Query和@QueryMap 作用:用于 @GET 方法的查询参数(Query = Url 中 ‘?’...,@GET传入的URL就可以省略 // 当GET、POST...HTTP等方法中没有设置Url时,则必须使用 {@link Url}提供 } 汇总 ?...// Retrofit把网络请求的URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里 // 如果接口里的url是一个完整的网址,那么放在Retrofit对象里的URL...doctype 值是 xml,则去除该值,若 doctype 值是 json,该值为空即可 // xmlVersion:如果 doctype 值是 json,则去除该值,若 doctype 值是 xml...,该值为空即可 // type:语言自动检测时为 null,为 null 时可为空。
@Url if (annotation instanceof Url) { //默认是在这里给gotUrl赋值的,且只能赋值一次,如果gotUrl==true,则说明之前赋值过...must not come after a @Query"); } //如果设置了relativeUrl,说明已经动态配置过url,所以这时候不能再使用@Url 注解..."@Path parameters may not be used with @Url."); } //如果设置了relativeUrl为null,无法进行动态配置,所以会抛异常...获取Converter.Factory对象,调用这个对象的stringConverter()来获取Converter对象,如果Converter不为空,则证明取到了,如果没有取到,则调用默认的转化器来转化...如果想在URL上添加查询字段,就要使用@Query 注解。用@ Body 来表示一个请求体。一个对象的实例将会被Converter.Factory的实例转化为网络请求。
创建接口,设置请求类型与参数 新建UserInfoModel类(一个根据服务端数据的格式,如json数据的格式字段,而设计的一个Java类,类中的成员字段对应着服务端数据的字段) 举个例子: 如服务器端数据格式如下...则对应设计的UserInfoModel类: ?...以及UserMgrService接口, 常用参数注解:** @GET、@POST:确定请求方式; @Path:请求URL的字符替代; @Query:要传递的参数; @QueryMap:包含多个...@Query注解参数; @Body:添加实体类对象 @FormUrlEncoded:URL编码; 示例: @GET("login") public Call login...创建Retrofit对象,设置数据解释器 Retrofit retrofit = new Retrofit.Builder() .baseUrl(url)
所以我们把整个流程分解为5大部分 1、Retrofit初始化 2、发起网络请求 3、执行请求 4、处理响应 (一)、Retrofit初始化 具体代码如下: .baseUrl(API_URL...说白了,就是根据注解和返回值的类型,判断,如果你这个CallAdapter支持则返回对应的CallAdapter,如果不支持则返回null。...说白了,就是根据返回值类型、参数注解、方法注解来获取一个对应的Converter,如果你这个Converter.Factory支持则返回对应的Converter,则返回一个对应的Converter,如果不支持则返回...3、如果有设置请求头,则获取请求头的值,并添加到Builder的headers 中 4、如果请求类型是Multipart的,则设置isMultipart =true 5、如果请求类型是isFormEncoded...如果请求成功则调用parseResponse来解析响应体,解析过程中没有问题则调用callSuccess()方法,如果解析出现问题则调用callFailure()方法,其实callFailure()内调用的是
对于Retrofit而言,如果baseUrl=http://localhost:8080/api/test/,方法请求路径如果是person,则该方法完整的请求路径是:http://localhost:...而方法请求路径如果是/person,则该方法完整的请求路径是:http://localhost:8080/person。 注入使用 将接口注入到其它Service中即可使用!...下面以"给指定请求的url后面拼接timestamp时间戳"为例,介绍下如何使用注解式拦截器。...拦截器的accessKeyId和accessKeySecret字段值会依据@Sign注解的accessKeyId()和accessKeySecret()值自动注入,如果@Sign指定的是占位符形式的字符串...@GET Map test3(@Url String url,@Query("name") String name); DELETE请求添加请求体 @HTTP(method
body 请求(适用于动态域名访问,当url为全域名时,会使用url的全域访问,当为非全域时,会拼接到BASE_URL的后面) @Headers({"Content-Type: application...和 @QueryMap 注解 @Query 其实相当于我们在请求时 Url 中 ‘?’...1 就是一个 @Query,如果我有多个 @Query,我们可以使用 @QueryMap 使用方法很简单,我就不多说了。...@PartMap 与 @Multipart 注解结合使用,适合文件上传的情况 @PartMap 用于表单字段,默认接受的类型是 Map,可用于实现多文件上传 @Path 用于 url 中的占位符 @Query...用于 GET 请求的 url 中指定 key=value 参数 @QueryMap 和 @Query 使用类似 @Url 指定请求路径,可以是全路径和相对路径 3.4 请求和响应格式注解 注解 说明
body 请求(适用于动态域名访问,当url为全域名时,会使用url的全域访问,当为非全域时,会拼接到BASE_URL的后面) @Headers({"Content-Type: application...和 @QueryMap 注解 @Query 其实相当于我们在请求时 Url 中 ‘?’...1 就是一个 @Query,如果我有多个 @Query,我们可以使用 @QueryMap 使用方法很简单,我就不多说了。...与 @Multipart 注解结合使用,适合文件上传的情况@PartMap用于表单字段,默认接受的类型是 Map,可用于实现多文件上传@Path用于 url 中的占位符@Query用于 GET 请求的...url 中指定 key=value 参数@QueryMap和 @Query 使用类似@Url指定请求路径,可以是全路径和相对路径 3.4 请求和响应格式注解 注解说明@FormUrlEncoded表示请求发送编码表单数据
(parameter #4 如果你是这样的: @GETCall getOrder(@Url String url, @Path("id") int id); 请在你的url...指定占位符,url可以这样: www.mylist.com/get{Id} 不支持或缺陷 Url不能为空 由于我的需求场景是固定的域是动态的吗,有时候我用www.myapi.com,有时候是www.youapi.com...GsonConverterFactory.create()) .build(); 结果报异常了 Base URL required 源码中发现构建时候check Url,如果为空就异常 public...public interface ApiService {@GETCall get(@Url String url, @Query...String url, @Query("id") int id) { // ...... } }ApiServicer
下面以给指定请求的url后面拼接timestamp时间戳为例,介绍下如何使用注解式拦截器。...下面以自定义@Sign拦截注解为例进行说明。...,则使用反射创建一个!...另外,accessKeyId和accessKeySecret字段必须提供setter方法。...如果方法的返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应的CallAdapterFactory执行适配处理!
注1:{占位符}和PATH尽量只用在URL的path部分,url中的参数使用Query和QueryMap 代替,保证接口定义的简洁 注2:Query、Field和Part这三者都支持数组和实现了Iterable...@POST("blog") Call> createBlog(@Body Blog blog); 被@Body注解的的Blog将会被Gson转换成RequestBody发送到服务器...retrofit) { return null; } // 这里用于对Field、FieldMap、Header、Path、Query、QueryMap注解的处理...7.2 Retrofit的Url组合规则 ? 从上面不能难看出以下规则: 如果你在注解中提供的url是完整的url,则url将作为请求的url。...如果你在注解中提供的url是不完整的url,且不以 / 开头,则请求的url为baseUrl+注解中提供的值 如果你在注解中提供的url是不完整的url,且以 / 开头,则请求的url为baseUrl的主机部分
下面以给指定请求的url后面拼接timestamp时间戳为例,介绍下如何使用注解式拦截器。...下面以自定义@Sign拦截注解为例进行说明。...,则使用反射创建一个!...另外accessKeyId和accessKeySecret字段必须提供setter方法。...如果方法的返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应的CallAdapterFactory执行适配处理!
; } public void setUrl(String url) { this.url = url; } } }...用@SerializedName告诉Retrofit,我想你把该字段映射成我自定义的名字。...import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Query; /** * Created by yangfan...("type") String type, @Query("pn") String pn, @Query("ps") String ps); } Activity 配置好以上信息以后,就可以开始写Android...响应码为:" + response.code()); } } @Override public
String url, @Query("id") Long id); } 方法必须使用@OkHttpClientBuilder注解标记!...下面以给指定请求的url后面拼接timestamp时间戳为例,介绍下如何使用注解式拦截器。...如果方法的返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应的CallAdapterFactory执行适配处理!...,则反射创建。...支持通过retrofit.global-converter-factories配置全局数据转换器工厂,转换器工厂实例优先从Spring容器获取,如果没有获取到,则反射创建。
String url, @Query("id") Long id); } 方法必须使用@OkHttpClientBuilder注解标记!...下面以给指定请求的url后面拼接timestamp时间戳为例,介绍下如何使用注解式拦截器。...如果方法的返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应的**CallAdapterFactory执行适配处理!...,则反射创建。...支持通过retrofit.global-converter-factories配置全局数据转换器工厂,转换器工厂实例优先从Spring容器获取,如果没有获取到,则反射创建。
String url, @Query("id") Long id); } 复制代码 方法必须使用@OkHttpClientBuilder注解标记!...下面以给指定请求的url后面拼接timestamp时间戳为例,介绍下如何使用注解式拦截器。...如果方法的返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应的CallAdapterFactory执行适配处理!...,则反射创建。...配置全局数据转换器工厂,转换器工厂实例优先从Spring容器获取,如果没有获取到,则反射创建。
"/> Retrofit将 Http请求 抽象成 Java接口:采用 注解 描述网络请求参数 和配置网络请求参数,用 动态代理 动态 将该接口的注解“翻译”成一个 Http的url请求,最后再执行 Http...retrofit = new Retrofit.Builder() //设置网络请求的Url地址 .baseUrl(baseUrl)...当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息;由于有boundary隔离,所以multipart/form-data既可以上传文件...与@Field的区别:功能相同,但携带的参数类型更加丰富,包括数据流,所以适用于 有文件上传 的场景 @Query和@QueryMap 作用:用于 @GET 方法的查询参数(Query = Url...@Path 作用:URL地址的缺省值 @Url 作用:直接传入一个请求的 URL变量 用于URL设置,当有URL注解时,@GET传入的URL就可以省略。
领取专属 10元无门槛券
手把手带您无忧上云