Rénovation en option et des champs obligatoires
Lors de l'utilisation de Rénovation, je sais que vous pouvez utiliser @FieldMap Map<String, String> options
en option pour spécifier des requêtes.
Dire que j'ai un appel d'api qui avait 2 champs requis et 3 champs facultatifs.
Comment pourrais-je le format de ces appels?
Serait-il quelque chose comme
Call<Response> getStuff(@Query("user_id") String userId, @Query("password") String password, @FieldMap Map<String, String> options)
ou serait la chose entière un seul @field-map comme:
Call<Response> getStuff(@FieldMap Map<String, String> options)
et avec cette option vous suffit de remplir les champs requis, puis utiliser null
pour les options?
Veuillez lire stackoverflow.com/questions/36634926/...
OriginalL'auteur Orbit | 2016-05-03
Vous devez vous connecter pour publier un commentaire.
@FieldMap
et@Query
params la fois le soutien des champs facultatifs. Comme vous l'avez mentionné, il suffit de passernull
si vous ne voulez pas passer une valeur.@FieldMap Map<String, String>
avec des valeurs null en cas de besoin?Je recommande généralement à l'aide explicite
@Query
champs, car ils peuvent être utilisés pour l'auto-document de points de terminaison, mais un@FieldMap
devrait aussi faire le travail.méfiez-vous! les valeurs null ne sont pas autorisés dans @field-map dans Retrofit2
OriginalL'auteur Ryan
Retrofit2 (contrairement à Retrofit1) n'accepte pas les valeurs null dans
@FiledMap
(throws exception).Null-valeurs passées à
@Field
/@Query
params sont ignorés (n'apparaissent pas dans http-request)OriginalL'auteur Vasily Makarov
J'ai coincé dans la question plusieurs heures et, enfin, de résoudre la question.
Je' ll utiliser Kotlin pour répondre à la question.
@Ryan a dit, vous pouvez aussi passer
null
que la valeur de Kotlin:Si vous avez un champs optionnels comme
@Query("page") int page
en Java, il y a quelque chose que vous devriez garder à l'esprit:En Java, vous ne pouvez pas passer la valeur null pour les types de données primitifs comme
int
,float
,long
, etc.Au lieu de cela, utiliser
Integer
,Float
,Long
, etc et le compilateur ne pas être de mauvaise humeur.Donc la bonne réponse est:
@Query("page") Integer page
.Et dans Kotlin, vous ne pouvez pas passer la valeur null pour les types de données primitifs comme
Int
,Float
,Long
, etc.À l'aide de
Int?
au lieu deInt
et de la Modernisation ignore tout de l'assemblage de la demande.C'est parce que tout Kotlin compilation sur la JVM, non nullable des valeurs de ce type sont représentées sous forme de valeurs de type primitif
int
, nullable valeur commeInt?
est un coffret de Type.Donc dans Kotlin, nullable Int Int? peut résoudre cette question.
Pour plus d'informations sur Kotlin primitif, voir: Quelle est la différence entre un Int et un Entier dans Kotlin?
J'espère que cela a aidé quelqu'un aussi.
OriginalL'auteur ininmm