改进 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,您应该像这样将 @Query
与 encoded = true
一起使用:
public interface ValidateEmailApi {
@GET("/api/email")
Call<Void> validateEmail(@Query(encoded = true, value = "email") @NonNull String email);
}
我正在尝试找出一种方法来阻止 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,您应该像这样将 @Query
与 encoded = true
一起使用:
public interface ValidateEmailApi {
@GET("/api/email")
Call<Void> validateEmail(@Query(encoded = true, value = "email") @NonNull String email);
}