我希望通过URL参数传递Object,然后通过序列化将其转换为字符串,然后通过反序列化获取对象。
这就是我所做的:
在创建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'
我该如何解决这个问题?
答案 0 :(得分:1)
使用base64将字节数组转换为String: java.util.Base64.getEncoder()。encodeToString(byte [] src) java.util.Base64.getDecoder()。decode(String src)
答案 1 :(得分:0)
UTF-8解码不会将所有字节序列映射到字符上,因此您将丢失数据。您的网址参数可能无法处理所有字符。
在任何情况下,您似乎都允许对序列化数据进行修改,出于多种原因这是一个非常糟糕的主意。