我试图找出一种方法来阻止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导致服务器错误.
在此先感谢您的帮助.
您需要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)
对于Retrofit 2,你应该@Query像encoded = true这样使用:
public interface ValidateEmailApi {
@GET("/api/email")
Call<Void> validateEmail(@Query(encoded = true, value = "email") @NonNull String email);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1037 次 |
| 最近记录: |