### Retrofit service method example Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-response-type-keeper/README.md A standard Retrofit service method definition that may be subject to R8 type removal if the return type is not referenced elsewhere. ```java @GET("users/{id}") Call getUser( @Path("id") String id); ``` -------------------------------- ### Generated keep rule example Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-response-type-keeper/README.md The resulting keep rule generated by the annotation processor for the User type. ```text -keep com.example.User ``` -------------------------------- ### Nested generics keep rules Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-response-type-keeper/README.md Example of generated keep rules for nested generic types like Call>. ```text -keep com.example.ApiResponse -keep com.example.User ``` -------------------------------- ### Tag release version Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/RELEASING.md Create a git tag for the new release version. ```bash $ git tag -am "Version X.Y.Z" X.Y.Z ``` -------------------------------- ### Create Retrofit Instance Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/index.md Configures the Retrofit builder with a base URL and creates an implementation of the service interface. ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com") .build(); GitHubService service = retrofit.create(GitHubService.class); ``` -------------------------------- ### Configure Retrofit with GsonConverterFactory Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/README.md Demonstrates how to add a converter factory to a Retrofit instance during the build process. ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com") .addConverterFactory(GsonConverterFactory.create()) .build(); ``` -------------------------------- ### Add Dependency via Maven or Gradle Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava3/README.md Include the adapter library in your project using Maven or Gradle build systems. ```xml com.squareup.retrofit2 adapter-rxjava3 latest.version ``` ```groovy implementation 'com.squareup.retrofit2:adapter-rxjava3:latest.version' ``` -------------------------------- ### Define Service Method with ListenableFuture Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/guava/README.md Service methods can now return ListenableFuture after the adapter is configured. ```java interface MyService { @GET("/user") ListenableFuture getUser(); } ``` -------------------------------- ### Configure Retrofit with kotlinx.serialization Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/kotlinx-serialization/README.md Use Json.asConverterFactory to create a converter factory for Retrofit, specifying the MediaType for the Content-Type header. ```kotlin val retrofit = Retrofit.Builder() .baseUrl("https://example.com/") .addConverterFactory( Json.asConverterFactory( "application/json; charset=UTF8".toMediaType())) .build() ``` -------------------------------- ### Configure Retrofit with RxJavaCallAdapterFactory Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava/README.md Add the RxJavaCallAdapterFactory to your Retrofit instance during the build process. ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); ``` -------------------------------- ### Configure Retrofit with RxJavaCallAdapterFactory Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/README.md Add an adapter factory to the Retrofit builder to support alternative execution mechanisms like RxJava. ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); ``` -------------------------------- ### Execute API Call Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/index.md Initiates a network request using the generated service method. ```java Call> repos = service.listRepos("octocat"); ``` -------------------------------- ### Push release and tags Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/RELEASING.md Push commits and tags to the remote repository to trigger the GitHub Action workflow for release artifact deployment. ```bash $ git push && git push --tags ``` -------------------------------- ### Gradle dependency configuration Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-response-type-keeper/README.md Configuration for adding the annotation processor to Java or Kotlin Gradle projects. ```groovy annotationProcessor 'com.squareup.retrofit2:response-type-keeper:' ``` ```groovy kapt 'com.squareup.retrofit2:response-type-keeper:' ``` -------------------------------- ### RxJava3CallAdapterFactory.create() Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava3/README.md Creates a call adapter factory that executes HTTP requests asynchronously on a background thread by default. ```APIDOC ## RxJava3CallAdapterFactory.create() ### Description Creates an instance of the RxJava3CallAdapterFactory to be added to the Retrofit builder. Requests are executed on a background thread by default. ### Usage ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/") .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) .build(); ``` ``` -------------------------------- ### Commit next development version Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/RELEASING.md Commit the update to the gradle.properties file to set the next snapshot version. ```bash $ git commit -am "Prepare next development version" ``` -------------------------------- ### Define Service Method with Future Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/scala/README.md Service methods can now use Future as their return type after configuring the adapter. ```java interface MyService { @GET("/user") Future getUser(); } ``` -------------------------------- ### RxJava2CallAdapterFactory.createAsync() Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava2/README.md Creates a call adapter factory that executes requests asynchronously using OkHttp's internal thread pool. ```APIDOC ## RxJava2CallAdapterFactory.createAsync() ### Description Creates a call adapter factory that uses OkHttp's internal thread pool for request execution, ensuring requests are performed asynchronously by default. ``` -------------------------------- ### Add Dependency via Gradle Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava/README.md Include the adapter-rxjava dependency in your Gradle project. ```groovy implementation 'com.squareup.retrofit2:adapter-rxjava:latest.version' ``` -------------------------------- ### Add Dependency via Gradle Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava2/README.md Include the adapter-rxjava2 dependency in your Gradle build file. ```groovy implementation 'com.squareup.retrofit2:adapter-rxjava2:latest.version' ``` -------------------------------- ### Add Gradle dependency Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/kotlinx-serialization/README.md Include the converter-kotlinx-serialization dependency in your Gradle project. ```groovy implementation 'com.squareup.retrofit2:converter-kotlinx-serialization:latest.version' ``` -------------------------------- ### Add Gradle dependency for converter-simplexml Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/simplexml/README.md Include this implementation line in your Gradle build file to use the Simple XML converter. ```groovy implementation 'com.squareup.retrofit2:converter-simplexml:latest.version' ``` -------------------------------- ### Gradle Dependency for retrofit-mock Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-mock/README.md Add this implementation line to your Gradle build file to include the retrofit-mock library. ```groovy implementation 'com.squareup.retrofit2:retrofit-mock:see.latest.version' ``` -------------------------------- ### RxJava3CallAdapterFactory.createWithScheduler(Scheduler) Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava3/README.md Creates a call adapter factory that uses the provided Scheduler for subscription. ```APIDOC ## RxJava3CallAdapterFactory.createWithScheduler(Scheduler scheduler) ### Description Creates an instance of the factory that uses the specified Scheduler for request execution. ``` -------------------------------- ### Gradle Dependency for converter-protobuf Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/protobuf/README.md Add this implementation line to your Gradle build file to use the Protocol Buffer converter. ```groovy implementation 'com.squareup.retrofit2:converter-protobuf:latest.version' ``` -------------------------------- ### Add Dependency via Maven Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava/README.md Include the adapter-rxjava dependency in your Maven project. ```xml com.squareup.retrofit2 adapter-rxjava latest.version ``` -------------------------------- ### Add Gradle Dependency Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/guava/README.md Include the adapter-guava dependency in your Gradle project. ```groovy implementation 'com.squareup.retrofit2:adapter-guava:latest.version' ``` -------------------------------- ### Add Guava Converter dependency with Gradle Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/guava/README.md Include this implementation line in your build.gradle file to use the Guava converter with Gradle. ```groovy implementation 'com.squareup.retrofit2:converter-guava:latest.version' ``` -------------------------------- ### Add Retrofit dependency with Gradle Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/download.mdx Use this implementation line in your build.gradle file to include the Retrofit library. ```kotlin implementation("com.squareup.retrofit2:retrofit:3.0.0") ``` -------------------------------- ### Gradle Dependency for Moshi Converter Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/moshi/README.md Add this implementation line to your Gradle build file to include the Moshi converter. ```groovy implementation 'com.squareup.retrofit2:converter-moshi:latest.version' ``` -------------------------------- ### RxJava2CallAdapterFactory.create() Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava2/README.md Registers the RxJava2 adapter with the Retrofit instance to enable reactive return types. ```APIDOC ## RxJava2CallAdapterFactory.create() ### Description Creates a call adapter factory for RxJava 2.x types. This should be added to the Retrofit.Builder using addCallAdapterFactory(). ### Usage ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/") .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); ``` ``` -------------------------------- ### Define GitHubService Interface Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/index.md Defines a service interface using Retrofit annotations to specify the HTTP method and URL path. ```java public interface GitHubService { @GET("users/{user}/repos") Call> listRepos(@Path("user") String user); } ``` -------------------------------- ### Static Query Parameters Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Specifies static query parameters directly within the relative URL string. ```java @GET("users/list?sort=desc") ``` -------------------------------- ### Add Dependency via Maven Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava2/README.md Include the adapter-rxjava2 dependency in your Maven project configuration. ```xml com.squareup.retrofit2 adapter-rxjava2 latest.version ``` -------------------------------- ### RxJava2CallAdapterFactory.createWithScheduler(Scheduler) Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava2/README.md Creates a call adapter factory that uses a provided Scheduler for subscription execution. ```APIDOC ## RxJava2CallAdapterFactory.createWithScheduler(Scheduler) ### Description Creates a call adapter factory that uses the specified Scheduler for subscription execution, allowing control over the threading of requests. ``` -------------------------------- ### Dynamic Path Parameters Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Updates the request URL dynamically using replacement blocks matched with @Path parameters. ```java @GET("group/{id}/users") Call> groupList(@Path("id") int groupId); ``` -------------------------------- ### Maven Dependency for retrofit-mock Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-mock/README.md Add this dependency to your Maven project to include the retrofit-mock library. ```xml com.squareup.retrofit2 retrofit-mock see.latest.version ``` -------------------------------- ### Gradle Dependency for Wire Converter Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/wire/README.md Add this implementation line to your Gradle build file to use the Wire converter. ```groovy implementation 'com.squareup.retrofit2:converter-wire:latest.version' ``` -------------------------------- ### Maven Dependency for converter-protobuf Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/protobuf/README.md Add this dependency to your Maven project to use the Protocol Buffer converter. ```xml com.squareup.retrofit2 converter-protobuf latest.version ``` -------------------------------- ### Add RxJava3CallAdapterFactory to Retrofit Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava3/README.md Configure the Retrofit instance by adding the RxJava3CallAdapterFactory to the builder. ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/") .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) .build(); ``` -------------------------------- ### Add Jackson Converter Gradle Dependency Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/jackson/README.md Include this implementation line in your Gradle build file to use the Jackson converter. ```groovy implementation 'com.squareup.retrofit2:converter-jackson:latest.version' ``` -------------------------------- ### Add Maven Dependency Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/guava/README.md Include the adapter-guava dependency in your Maven project. ```xml com.squareup.retrofit2 adapter-guava latest.version ``` -------------------------------- ### Add Dependency via Gradle Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/scala/README.md Include the adapter-scala dependency in your Gradle build file. ```groovy implementation 'com.squareup.retrofit2:adapter-scala:latest.version' ``` -------------------------------- ### Add Maven dependency Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/kotlinx-serialization/README.md Include the converter-kotlinx-serialization dependency in your Maven project. ```xml com.squareup.retrofit2 converter-kotlinx-serialization latest.version ``` -------------------------------- ### Add Retrofit dependency with Maven Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/download.mdx Include this dependency block in your pom.xml file to add Retrofit to your project. ```xml com.squareup.retrofit2 retrofit 3.0.0 ``` -------------------------------- ### RxJava3CallAdapterFactory.createSynchronous() Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava3/README.md Creates a call adapter factory where requests are not automatically scheduled on a background thread, allowing manual control via subscribeOn. ```APIDOC ## RxJava3CallAdapterFactory.createSynchronous() ### Description Creates an instance of the factory that does not force background threading. Use this when you want to manually control the Scheduler using subscribeOn on the returned reactive type. ``` -------------------------------- ### Add JAXB Converter dependency via Gradle Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/jaxb/README.md Include this implementation line in your Gradle build file to use the JAXB converter. ```groovy implementation 'com.squareup.retrofit2:converter-jaxb:latest.version' ``` -------------------------------- ### Add Gson Converter Dependency via Gradle Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/gson/README.md Include this implementation line in your Gradle build file to use the Gson converter. ```groovy implementation 'com.squareup.retrofit2:converter-gson:latest.version' ``` -------------------------------- ### Map-based Headers Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Uses a Map for complex header combinations with the @HeaderMap annotation. ```java @GET("user") Call getUser(@HeaderMap Map headers) ``` -------------------------------- ### Multipart Requests Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Sends multipart data using @Multipart and @Part annotations. ```java @Multipart @PUT("user/photo") Call updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description); ``` -------------------------------- ### Define Service Method with Observable Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava/README.md Use RxJava types like Observable as return types in your service interface methods. ```java interface MyService { @GET("/user") Observable getUser(); } ``` -------------------------------- ### Commit release version Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/RELEASING.md Commit the changes made to version numbers and changelogs using the specified message format. ```bash $ git commit -am "Prepare version X.Y.Z" ``` -------------------------------- ### Register GuavaCallAdapterFactory Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/guava/README.md Add the GuavaCallAdapterFactory to your Retrofit instance during the build process. ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/") .addCallAdapterFactory(GuavaCallAdapterFactory.create()) .build(); ``` -------------------------------- ### Maven Dependency for Wire Converter Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/wire/README.md Add this dependency to your Maven project to use the Wire converter. ```xml com.squareup.retrofit2 converter-wire latest.version ``` -------------------------------- ### Map-based Query Parameters Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Uses a Map for complex query parameter combinations with the @QueryMap annotation. ```java @GET("group/{id}/users") Call> groupList(@Path("id") int groupId, @QueryMap Map options); ``` -------------------------------- ### Static Headers Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Sets static headers for a method using the @Headers annotation. ```java @Headers("Cache-Control: max-age=640000") @GET("widget/list") Call> widgetList(); ``` ```java @Headers({ "Accept: application/vnd.github.v3.full+json", "User-Agent: Retrofit-Sample-App" }) @GET("users/{username}") Call getUser(@Path("username") String username); ``` -------------------------------- ### HTTP Request Method Annotation Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Defines the request method and relative URL for an interface method. ```java @GET("users/list") ``` -------------------------------- ### Dynamic Query Parameters Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Adds dynamic query parameters to the request URL using the @Query annotation. ```java @GET("group/{id}/users") Call> groupList(@Path("id") int groupId, @Query("sort") String sort); ``` -------------------------------- ### Maven Dependency for Moshi Converter Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/moshi/README.md Add this dependency to your Maven project to include the Moshi converter. ```xml com.squareup.retrofit2 converter-moshi latest.version ``` -------------------------------- ### Add Maven dependency for converter-simplexml Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/simplexml/README.md Include this dependency in your Maven project to use the Simple XML converter. ```xml com.squareup.retrofit2 converter-simplexml latest.version ``` -------------------------------- ### Add Dependency via Maven Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/scala/README.md Include the adapter-scala dependency in your Maven project configuration. ```xml com.squareup.retrofit2 adapter-scala latest.version ``` -------------------------------- ### Add Guava Converter dependency with Maven Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/guava/README.md Include this dependency in your pom.xml file to use the Guava converter with Maven. ```xml com.squareup.retrofit2 converter-guava latest.version ``` -------------------------------- ### Gradle Dependency for Scalars Converter Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/scalars/README.md Add this implementation line to your Gradle build file to include the Scalars Converter. ```groovy implementation 'com.squareup.retrofit2:converter-scalars:latest.version' ``` -------------------------------- ### Add Jackson Converter Maven Dependency Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/jackson/README.md Include this dependency in your Maven project to use the Jackson converter. ```xml com.squareup.retrofit2 converter-jackson latest.version ``` -------------------------------- ### Register ScalaCallAdapterFactory in Retrofit Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/scala/README.md Add the ScalaCallAdapterFactory to your Retrofit instance builder to enable Scala Future support. ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/") .addCallAdapterFactory(ScalaCallAdapterFactory.create()) .build(); ``` -------------------------------- ### Add Gson Converter Dependency via Maven Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/gson/README.md Include this dependency in your Maven project to use the Gson converter. ```xml com.squareup.retrofit2 converter-gson latest.version ``` -------------------------------- ### Add JAXB Converter dependency via Maven Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/jaxb/README.md Include this dependency in your Maven project to use the JAXB converter. ```xml com.squareup.retrofit2 converter-jaxb latest.version ``` -------------------------------- ### Dynamic Header Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Updates a request header dynamically using the @Header annotation. ```java @GET("user") Call getUser(@Header("Authorization") String authorization) ``` -------------------------------- ### Kotlin Suspend Function Returning Response Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Kotlin suspend function that returns a Response object. ```kotlin @GET("users") suspend fun getUser(): Response ``` -------------------------------- ### Kotlin Suspend Function Returning Body Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Kotlin suspend function that returns the body directly, throwing an HttpException on non-2XX status. ```kotlin @GET("users") suspend fun getUser(): User ``` -------------------------------- ### Register RxJava2CallAdapterFactory in Retrofit Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-adapters/rxjava2/README.md Add the RxJava2CallAdapterFactory to the Retrofit builder to enable support for RxJava 2 types. ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/") .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); ``` -------------------------------- ### Request Body Annotation Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Specifies an object to be used as the HTTP request body using the @Body annotation. ```java @POST("users/new") Call createUser(@Body User user); ``` -------------------------------- ### Maven Dependency for Scalars Converter Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/retrofit-converters/scalars/README.md Add this dependency to your Maven project to include the Scalars Converter. ```xml com.squareup.retrofit2 converter-scalars latest.version ``` -------------------------------- ### Form-Encoded Data Source: https://github.com/lysine-dev/retrofit/blob/3.0.0/website/src/content/docs/declarations.md Sends form-encoded data using @FormUrlEncoded and @Field annotations. ```java @FormUrlEncoded @POST("user/edit") Call updateUser(@Field("first_name") String first, @Field("last_name") String last); ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.