0

シリアル化によってオブジェクトを文字列に変換して 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'

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

base64 を使用してバイト配列を文字列に変換します: java.util.Base64.getEncoder().encodeToString(byte[] src) java.util.Base64.getDecoder().decode(String src)

于 2015-11-06T18:27:12.640 に答える
0

UTF-8 デコードでは、すべてのバイト シーケンスが文字にマップされるわけではないため、データが失われます。URL パラメーターもすべての文字を処理できない場合があります。

いずれにせよ、シリアル化されたデータの改ざんを許可しているように見えますが、これは多くの理由から非常に悪い考えです。

于 2013-07-19T11:09:00.997 に答える