我是改装的新手,我正在尝试为我的改造实施自定义错误处理程序。
我从服务器上回复了以下回复:
[
{
"field": "username",
"message": "Username \"test\" has already been taken."
},
{
"field": "email",
"message": "Email \"test@custom.ro\" has already been taken."
}
]
在我的错误处理程序中,我执行:
try {
ModelError restError = (ModelError) cause.getBodyAs(ModelError.class);
}
catch (Exception ex) {
Log.d("custom", ""+ex.toString());
}
我的模型看起来像:
public class ModelError
{
String message;
String field;
}
但我记得:
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path
然后我替换错误处理程序whit中的代码:
List<ModelError> restError = (List<ModelError>) cause.getBodyAs(ModelError.class);
仍然在日志中收到同样的错误。
我做错了什么? 感谢
答案 0 :(得分:0)
public class ModelResponse{
ArrayList<ModelError> modelErrorList;
}
try {
ModelResponse modelResponse = (ModelResponse) cause.fromJson(response, ModelResponse.class);
}
catch (Exception ex) {
Log.d("custom", ""+ex.toString());
}
我相信cause
是gson对象。希望这能帮助您实现目标。
答案 1 :(得分:0)
您还可以使用以下代码获取解析器错误响应,而无需添加新类来处理响应:
List<ModelError> error = (List<ModelError>) cause.getBodyAs(new TypeToken<List<ModelError>>() {}.getType());
<强>更新强>
假设Rest
是您的Retrofit服务,您可以通过这种方式获得错误响应:
Rest rest = ...// creating rest service
rest.requestToWebService(data, new Callback<WebServiceResponse>() {
@Override
public void success(WebServiceResponse webServiceResponse, Response response) {
// Do success things!
}
@Override
public void failure(RetrofitError error) {
List<ModelError> modelErrors = (List<ModelError>) error.getBodyAs(new TypeToken<List<ModelError>>() {}.getType());
}
});
答案 2 :(得分:0)
每个Json对象都以&#39; {&#39;标志,每个json数组都以&#39; [&#39;标志。 你得到的错误是因为你试图从包含两个Model类(即模型数组)的东西创建一个json对象(即Model类),尝试将错误解析为错误列表而不是对象,你会没事的。