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

时间:2015-03-19 19:59:26

标签: 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);

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

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

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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

对于Retrofit 2,您应将@Queryencoded = true一起使用,如下所示:

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