2013-07-19 2 views
0

URL 매개 변수를 통해 객체를 전달하려면 직렬화로 문자열로 변환 한 다음 역 직렬화로 객체를 가져옵니다. 여기직렬화 : URL 매개 변수로 객체 전달 및 값 추출

내가 무엇을했는지 있습니다 :의 URL 매개 변수를 만드는 동안

:

SerializationUtils.getAsString(localMarketHomeDTO.getPointInTime()); //serializing it 

값의 추출시 : localMarketHomeDTO.getPointInTime()이 유형 java.util.Date이다 여기

SerializationUtils.getAsObject(paramValue.toString(),Class.forName("java.util.Date")); //deserializing it 

.

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; 
    } 
} 

하지만 예외가 오전 :

클래스 SerializationUtils

'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

UTF-8 디코딩은 모든 바이트 시퀀스를 문자에 매핑하지 않으므로 데이터를 잃게됩니다. URL 매개 변수로 모든 문자를 처리하지 못할 수도 있습니다.

어떤 경우에도 직렬화 된 데이터가 변조되는 것을 허용하는 것처럼 보입니다. 이는 여러 가지 이유로 매우 나쁜 생각입니다.

+0

UTF-8없이 시도했지만 행운이 없습니다. –

+0

UTF-8이 없습니까? 어떤 기본 문자 집합이 작동되는 것처럼? 훨씬 좋을 것 같지 않습니다. 당신은 Base64 또는 이와 유사한 인코딩해야합니다. –

1

사용을 base64 문자열의 바이트 배열을 변환 :.. java.util.Base64.getEncoder() encodeToString (바이트 [] SRC) java.util.Base64.getDecoder() 디코딩 (문자열 SRC)