我正在使用改造库来处理应用程序,但我不负责后端。
这是我收到错误时收到的JSON。 例如,当参数' email'是错的我把它作为JSON响应:
{"status":"error","errors":{"email":{"emailNotFound":"Email not found"}}}
现在发送电子邮件' part是错误的参数。如何为此创建一个可以重用多个参数的对象。
我有这个:
public class AuthenticateResponse {
@Expose
private String status;
@Expose
private Error errors;
@Expose
private String session;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getSession() {
return session;
}
public void setSession(String session) {
this.session = session;
}
public Error getErrors() {
return errors;
}
public void setErrors(Error errors) {
this.errors = errors;
}
}
但我不知道如何制作我的Error对象,因为该键是可变的。在这种情况下,它的电子邮件是'但它总是不同的。
我有这个
public class Errors {
private List<Object> list;
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
}
但是&#39; list&#39;不是json中的关键所以这不起作用。
有解决方案吗
答案 0 :(得分:2)
我找到了解决方案。您可以在改装中注册类型适配器,如下所示:
Gson gson = new GsonBuilder()
.registerTypeAdapter(Errors.class, new ErrorAdapter())
.create();
将该转换器传递给RestAdapter
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(ENDPOINT)
.setRequestInterceptor(requestInterceptor)
.setConverter(new GsonConverter(gson))
.build();
在ErrorAdapter中,我手动解析JSON
public static class ErrorAdapter implements JsonDeserializer<Errors> {
@Override
public Errors deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
Errors errors = new Errors();
try {
if (json != null) {
JsonObject jsonObject = json.getAsJsonObject();
for (Map.Entry<String, JsonElement> elementJson : jsonObject.entrySet()) {
JsonObject error = elementJson.getValue().getAsJsonObject();
String errorValue = error.entrySet().iterator().next().getKey();
errors.addError(errorValue);
}
}
} catch (Exception e) {
errors = null;
}
return errors;
}
}
答案 1 :(得分:0)
只需制作这样的响应类:
public class EmailReponse{
public String status;
public MError errors;
public static class MError{
public HashMap<String, String> email;
}
}
通过此响应,您可以获得HashMap等电子邮件对象。 希望对你有所帮助!