我想通過URL參數傳遞對象,方法是將其通過序列化轉換爲字符串,然後通過反序列化獲取對象。序列化:將對象傳遞爲URL參數並提取值
這裏是我做了什麼:
在URL參數創建:
SerializationUtils.getAsString(localMarketHomeDTO.getPointInTime()); //serializing it
值的提取過程:
SerializationUtils.getAsObject(paramValue.toString(),Class.forName("java.util.Date")); //deserializing it
這裏localMarketHomeDTO.getPointInTime()
的類型是java.util.Date
的。
類SerializationUtils
是:
public class SerializationUtils{
private SerializationUtils(){
}
public static <T extends Serializable> String getAsString(T object) throws Exception {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(object);
objectOutputStream.flush();
return byteArrayOutputStream.toString("UTF-8");
}
public static <T> T getAsObject(String string, Class<T> clazz) throws Exception {
byte[] byteArray = string.getBytes("UTF-8");
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
T object = clazz.cast(objectInputStream.readObject());
return object;
}
}
,但我有例外:
'java.util.Date; local class incompatible: stream classdesc serialVersionUID = 7523895402267505689, local class serialVersionUID = 7523967970034938905' due to 'java.io.InvalidClassException: java.util.Date; local class incompatible: stream classdesc serialVersionUID = 7523895402267505689, local class serialVersionUID = 7523967970034938905'
我怎樣才能解決這個問題呢?
我試過沒有UTF-8,但沒有運氣。 –
沒有UTF-8?在任何默認的字符集恰好在運行?不太可能好得多。您需要使用Base64或類似軟件對其進行編碼。 –