use*_*009 12 java json retrofit
我正在尝试传递下面格式的字符串作为http post请求的正文.
param1=PARAM1¶m2=PARAM2¶m3=PARAM3
Run Code Online (Sandbox Code Playgroud)
但改装编码我的身体,以便=成为\ u003d和&成为\ u0026.我最终得到一个字符串,实际上看起来像这样:
param1\u003dPARAM1\u0026param2\u003dPARAM2\u0026param3\u003dPARAM3
Run Code Online (Sandbox Code Playgroud)
我怎么能防止这种情况?
我的改造休息api定义如下.
public interface RestAPI {
@POST("/oauth/token")
public void getAccessToken(@Body String requestBody, Callback<Response> response);
}
Run Code Online (Sandbox Code Playgroud)
如果你在请求体中有一个序列化的类(比如HashMap),并且你想要阻止编码(比如vezikon和我的问题),你可以创建一个带有禁用转义的自定义Gson:
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
Run Code Online (Sandbox Code Playgroud)
将此转换器传递给您的其他适配器:
yourRestAdapter = new RestAdapter.Builder()
.setEndpoint(.....)
.setClient(.....)
.setConverter(new GsonConverter(gson))
.build();
Run Code Online (Sandbox Code Playgroud)
这样,帖子正文中的"="字符在提交时保持不变.
要直接回答问题,可以使用TypedString方法参数类型.值被更改的原因是因为Retrofit正在将其传递String给Gson以便编码为JSON.使用TypedString或任何子TypedOutput类将阻止此行为,基本上告诉Retrofit您将自己处理创建直接请求正文.
但是,该有效载荷格式称为表单URL编码.Retrofit对它有本机支持.您的方法声明应该看起来像这样:
@FormUrlEncoded
@POST("/oauth/token")
void getAccessToken(
@Field("param1") String param1,
@Field("param2") String param2,
@Field("param3") String param3,
Callback<Response> callback);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11683 次 |
| 最近记录: |