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

Retrofit POST request sending email field with %40 instead of @

我正在尝试找出一种方法来阻止 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);

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

client_id=test&client_secret=cajcckkcaaa&username=androidtest12%40gmail.com&password=Password23&grant_type=password

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

在此先感谢您的帮助。

您需要为您的用户名字段设置 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);

对于 Retrofit 2,您应该像这样将 @Queryencoded = true 一起使用:

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