我有以下问题: 我的API的答案总是像这样的“风格”:
{
"type": "dbUserResponse",
"user": {
"apellido": "canadas",
"email": "rj@canada.es",
"nacimiento": "1995-01-01T00:00:00+01:00",
}
}
即字段“dbXXXXResponse”和模型。即,字段“响应”和模型。在这种情况下用户。模型警报的另一个例子:
{
"type": "dbAlertResponse",
"alert": {
"alertId": 0,
"fecha": "2004-10-19T10:23:54+02:00",
}
}
Oki ......我需要什么?创建一个类型适配器反序列化或更多?
一个通用,或者我必须为每个模型制作一个typedapter。
我做了以下事情:
public class GenericDeserializer<T> implements JsonDeserializer<T>
{
@Override
public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
throws JsonParseException
{
// Get the "content" element from the parsed JSON
JsonElement content = je.getAsJsonObject().get("type");
if(content.toString().equals("\"dbUserResponse\"")){
content = je.getAsJsonObject().get("user");
JsonObject jsonObject = content.getAsJsonObject();
if(jsonObject.has("nacimiento")){
String date = jsonObject.get("nacimiento").getAsString();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date date2 = null;
try {
date2 = sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date2);
jsonObject.addProperty("nacimiento", newstring);
content = jsonObject.getAsJsonObject();
}
}
}
if(content.toString().equals("\"dbAlertResponse\"")){
// other case..... etc...
}
else{
//content = '{"error":"mierror"}';
}
// Deserialize it. You use a new instance of Gson to avoid infinite recursion
// to this deserializer
return new Gson().fromJson(content, type);
}
}
因此,我成功获得了子JSON“用户”并在Android中填充了我的用户模型。 但“nacimiento”(日期)字段未格式化: - (
我还创建了Singleton Retrofit,我不确定它是否正确:
public class SingletonRetrofit {
public static final String BASE_URL = "xxxxxxxxxxxxxxxxxxx";
private static Retrofit retrofit = null;
public static Retrofit getClient() {
Gson gson = new GsonBuilder()
.registerTypeAdapter(User.class, new GenericDeserializer<User>())
.create();
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}
}
我的问题: 1º-当模特在像我这样的另一个Json Json里面时,如何正确格式化日期? 2º-我是否必须为每个型号创建一个typeadapter? :-S 谢谢
答案 0 :(得分:0)
为什么不使用POJO? JSON中的日期是String,因此您必须将String转换为Date。