我有一個映射問題,它使用jackson庫將Json API回調轉換爲自定義對象。Json DateTime對象到GregorianCalendar
我有我的用戶自定義類:
public class User {
protected String id;
protected GregorianCalendar registredAt;
protected String username;
protected Team team;
public User() {
}
public User(String id, GregorianCalendar registredAt, String username, Team team) {
this.id = id;
this.registredAt = registredAt;
this.username = username;
this.team = team;
}
public User(HashMap<String, Object> attributes) {
this.id = (String) attributes.get("id");
this.registredAt = (GregorianCalendar) attributes.get("registredAt");
this.username = (String) attributes.get("username");
this.team = (Team) attributes.get("team");
}
}
這裏是我的回調:
{
id: "4feab37c5600bbd56f000132",
registredAt: {
date: "2012-06-27 09:17:15",
timezone_type: 3,
timezone: "Europe/Paris"
},
username: "John Doe",
team: {
id: "4feab37c5600bbd56f000130",
indice: 1,
name: "John Doe's Team",
score: 200
}
}
然後,我嘗試初始化一個用戶對象:
// Code from a doInBackground() method of a custom AsyncTask.
URL completePath = new URL(apiBaseURL + "api/user/4feab37c5600bbd56f000132/show");
APIconnection = (HttpURLConnection) completePath.openConnection();
APIconnection.setDoInput(true);
APIconnection.connect();
callbackParser = jsonFactory.createJsonParser(APIconnection.getInputStream());
response = objectMapper.readValue(callbackParser, User.class);
// Catch a JsonMappingException :
Can not deserialize instance of java.util.Calendar out of START_OBJECT token at [Source: org.apache.har[email protected]4082c7a0; line: 1, column: 33] (through reference chain: classes.models.User["registredAt"])
我想問題是回調registredAt對象是一個json_encoded PHP \ DateTime實例... 應該我更改註冊的Java用戶對象的類型? 或者我的構造函數中缺少一些東西?
貴公曆類從日曆擴展?它是否實現了Serializable接口? – 2012-07-10 11:34:38
這是一個擴展java.util.Calendar中,其中實現Serializable inteface :) 的問題是一樣的,當我更換的GregorianCalendar由Calendar類(java.util中的命名空間) 不能反序列化java.util.GregorianCalendar中的類java.util.Calendar的實例超出了START_OBJECT標記。 – 2012-07-10 12:12:48
可串行化是無關緊要的 - 它不會被JSON序列化器使用,因爲它只意味着JDK可以生成二進制表示。 – StaxMan 2012-07-10 19:46:25