Orb*_*bit 16 android retrofit retrofit2
使用Retrofit时,我知道您可以使用它@FieldMap Map<String, String> options来指定可选查询.
假设我有一个api调用,它有2个必填字段和3个可选字段.
我该如何格式化这些电话?
它会是什么样的
Call<Response> getStuff(@Query("user_id") String userId, @Query("password") String password, @FieldMap Map<String, String> options)
Run Code Online (Sandbox Code Playgroud)
或者整个事情是一个单独的@FieldMap:
Call<Response> getStuff(@FieldMap Map<String, String> options)
使用此选项,您只需填写必填字段然后null用于选项吗?
Rya*_*yan 29
@FieldMap和@Queryparams都支持可选字段.正如您所提到的,null如果您不想传递值,只需传递即可.
小智 6
我在这个问题上停留了几个小时,终于解决了这个问题。
我将用Kotlin回答这个问题。
正如@Ryan所说,您还可以将nullKotlin中的值作为传递值:
fun getStuff(@Query("user_id") userId: String? = null ,
@Query("password") password: String? = null,
@FieldMap options: Map<String, String>? = null): Call<Response>
Run Code Online (Sandbox Code Playgroud)
如果您有@Query("page") int pageJava 等可选字段,则应牢记以下几点:
在Java中,你不能传递null类型喜欢原始数据int,float,long,等。
相反,使用Integer,Float,Long等编译器会不会是脾气暴躁。
因此正确的答案是:@Query("page") Integer page。
而在科特林,你不能传递null类型喜欢原始数据Int,Float,Long,等。
在组装请求时,使用Int?而不是Intand Retrofit将忽略它们。
这是因为,当Kotlin在JVM上进行编译时,此类型的不可为null的值将表示为原始类型的int值,而可为null的值将类似于Int?盒装Type。
那么在Kotlin中,可以为null的Int Int吗?可以解决这个问题。
有关Kotlin原语的更多信息,请参见:Kotlin中Int和Integer有什么区别?
我希望它也能帮助到别人。