Gson chỉ có thể xử lý một định dạng ngày giờ (được chỉ định trong trình tạo) cộng với iso8601 nếu phân tích cú pháp với định dạng tùy chỉnh là không thể. Vì vậy, một giải pháp có thể được để viết deserializer tùy chỉnh của bạn. Để giải quyết vấn đề của bạn tôi đã xác định:
package stackoverflow.questions.q18473011;
import java.util.Date;
public class Foo {
Date date;
Date created_at;
public Foo(Date date, Date created_at){
this.date = date;
this.created_at = created_at;
}
@Override
public String toString() {
return "Foo [date=" + date + ", created_at=" + created_at + "]";
}
}
với deserializer này:
package stackoverflow.questions.q18473011;
import java.lang.reflect.Type;
import java.text.*;
import java.util.Date;
import com.google.gson.*;
public class FooDeserializer implements JsonDeserializer<Foo> {
public Foo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
String a = json.getAsJsonObject().get("date").getAsString();
String b = json.getAsJsonObject().get("created_at").getAsString();
SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdfDateWithTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Date date, created;
try {
date = sdfDate.parse(a);
created = sdfDateWithTime.parse(b);
} catch (ParseException e) {
throw new RuntimeException(e);
}
return new Foo(date, created);
}
}
Bước cuối cùng là tạo ra một trường hợp Gson
với bộ chuyển đổi đúng:
package stackoverflow.questions.q18473011;
import com.google.gson.*;
public class Question {
/**
* @param args
*/
public static void main(String[] args) {
String s = "{ \"date\": \"2013-07-16\", \"created_at\": \"2013-07-16T22:52:36Z\"}";
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Foo.class, new FooDeserializer());
Gson gson = builder.create();
Foo myObject = gson.fromJson(s, Foo.class);
System.out.println("Result: "+myObject);
}
}
kết quả của tôi:
Result: Foo [date=Tue Jul 16 00:00:00 CEST 2013, created_at=Tue Jul 16 22:52:36 CEST 2013]
Trông giống như một bản sao của [câu hỏi này] (http://stackoverflow.com/questions/6696082/set-date -format-in-gson-in-jsp). – Davmrtl
@Davmrtl: không giống nhau vì có hai định dạng ngày khác nhau tại đây. Vì vậy, nó đòi hỏi một cách tiếp cận khác nhau. – giampaolo