【发布时间】:2016-02-18 20:44:25
【问题描述】:
我正在尝试使用Retrofit 2 转换以下响应
{
"errorNumber":4,
"status":0,
"message":"G\u00f6nderilen de\u011ferler kontrol edilmeli",
"validate":[
"Daha \u00f6nceden bu email ile kay\u0131t olunmu\u015f. L\u00fctfen giri\u015f yapmay\u0131 deneyiniz."
]
}
但我总是在onResponse 方法中得到null 响应。因此,我尝试使用response.errorBody.string() 查看响应的错误正文。错误正文包含与原始响应完全相同的内容。
这是我的服务方法,Retrofit 对象和响应数据声明:
@FormUrlEncoded
@POST("/Register")
@Headers("Content-Type: application/x-www-form-urlencoded")
Call<RegisterResponse> register(
@Field("fullName") String fullName,
@Field("email") String email,
@Field("password") String password);
public class RegisterResponse {
public int status;
public String message;
public int errorNumber;
public List<String> validate;
}
OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
final String content = UtilityMethods.convertResponseToString(response);
Log.d(TAG, lastCalledMethodName + " - " + content);
return response.newBuilder().body(ResponseBody.create(response.body().contentType(), content)).build();
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
domainSearchWebServices = retrofit.create(DomainSearchWebServices.class);
我已经控制了JSON 和jsonschema2pojo 的响应,看看我是否对我的响应类 wright 进行了建模,看起来还可以。
为什么 Retrofit 无法转换我的响应?
更新
现在作为一种解决方法,我正在从错误正文中构建我的响应。
【问题讨论】:
-
你设置了Json转换器吗?像下面
RestAdapter restAdapter = new RestAdapter.Builder() .setConverter(new GsonConverter(gson)) -
@problemsolver 是的,我做到了。我已经添加了相关代码。
-
@problemsolver 我用过
addConverterFactory而不是setConverter -
收到什么响应状态?您可以使用调用方法
response.getStatus()进行检查 -
根据维基百科:
400 Bad Request服务器不能或不会处理请求,因为某些被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性请求路由) )。所以 Retrofit 把它当作错误响应