我想使用泛型模型通過websocket從服務器到客戶端廣播不同的數據。如何使用SimpleJson序列化Java泛型
類使用SimpleJson被序列化:Unfortunatley我同時想序列化下面的類結構總是得到一個錯誤
public class UpdateBroadcastMessageData {
private List<UpdateBroadcastModel<? extends Object>> models = new ArrayList<UpdateBroadcastModel<? extends Object>>();
public void clearModels() {
...
}
public void addModel(Object model) {
...
}
public void removeModel(Object model) {
...
}
}
public class UpdateBroadcastModel<T extends Object> {
private String clazz = null;
private T payload = null;
...
}
我JsonUtil類總是拋出的消息「無法轉換成JSON」。
import org.codehaus.jackson.map.ObjectMapper;
public class JsonUtil {
private static ObjectMapper mapper = new ObjectMapper();
public static String convertToJson(Object object) {
try {
return mapper.writeValueAsString(object);
} catch (Exception e) {
log.error("Could not convert Object to JSON", e);
return "";
}
}
public static <T> T convertToObject(String json, Class<T> clazz) {
try {
return mapper.readValue(json, clazz);
} catch (Exception e) {
log.error("Could not convert JSON to Object", e);
return null;
}
}
}
有人可以幫助我,告訴我該怎麼做才能夠序列化上面的數據結構?
該錯誤指的是converttoJson方法。這裏是堆棧跟蹤:
ERROR [pool-3-thread-1][JsonUtil:16] Could not convert Object to JSON
org.codehaus.jackson.map.JsonMappingException: No serializer found for class
...UpdateBroadcastMessageData and no properties discovered to create BeanSerializer
(to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))
at org.codehaus.jackson.map.ser.StdSerializerProvider$1.serialize(StdSerializerProvider.java:62)
at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:296)
at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:224)
at org.codehaus.jackson.map.ObjectMapper._configAndWriteValue(ObjectMapper.java:1512)
at org.codehaus.jackson.map.ObjectMapper.writeValueAsString(ObjectMapper.java:1262)
at ...JsonUtil.convertToJson(JsonUtil.java:14)
at ...CommitPoiTokenAction.doProcess(CommitPoiTokenAction.java:118)
at ...BaseWebSocketTokenAction.processMessage(BaseWebSocketTokenAction.java:29)
at ...WebSocketListener$1.run(WebSocketListener.java:145)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
pool-3-thread-1: code=81 len=118
在此先感謝。 faiko
哪種方法失敗 - 是convertToJson或convertToObject?你可以添加異常堆棧跟蹤? – gkamal
我添加了上面的堆棧跟蹤。它在convertToJson中失敗 – faiko
你在這些類中有getter/setter方法(屬性)嗎?傑克遜默認使用getter方法將java對象序列化爲json和setter方法來做相反的處理。從例外看來,類沒有任何getter/setter方法。 – gkamal