使用%40而不是@重新发送POST请求发送电子邮件字段

Akh*_*tta 2 retrofit

我试图找出一种方法来阻止Retrofit编码我传递给POST请求的电子邮件地址.这是我的POST界面

@POST("/security/oauth/token")
@FormUrlEncoded
void getAccessToken(@Field("client_id") String clientId,
                  @Field("client_secret") String clientSecret,
                  @Field("username") String username,
                  @Field("password") String password,
                  @Field("grant_type") String grantType, Callback<AccessToken> cb);
Run Code Online (Sandbox Code Playgroud)

当我发出请求时,Retrofit将这些字段发送为

client_id=test&client_secret=cajcckkcaaa&username=androidtest12%40gmail.com&password=Password23&grant_type=password
Run Code Online (Sandbox Code Playgroud)

这里的罪魁祸首是电子邮件地址,从androidtest12@gmail.com更改为androidtest12%40gmail.com导致服务器错误.

在此先感谢您的帮助.

MrE*_*r13 5

您需要encodeValue = false为您的用户名字段设置此项才能生效,因为它正在编码.他们在Retrofit Javadoc上记录了这一点.以下是使用您的数据的示例.

@POST("/security/oauth/token")
@FormUrlEncoded
void getAccessToken(@Field("client_id") String clientId,
              @Field("client_secret") String clientSecret,
              @Field(encodeValue = false, value = "username") String username,
              @Field("password") String password,
              @Field("grant_type") String grantType, Callback<AccessToken> cb);
Run Code Online (Sandbox Code Playgroud)


Sir*_*lot 5

对于Retrofit 2,你应该@Queryencoded = true这样使用:

public interface ValidateEmailApi {
    @GET("/api/email")
    Call<Void> validateEmail(@Query(encoded = true, value = "email") @NonNull String email);
}
Run Code Online (Sandbox Code Playgroud)