2015-09-23 28 views
0

所以我使用com.fasterxml.jackson readValue方法,它工作得很好。它發生在一個JSON字符串和填充並保存到OBJ一個POJO:在Java中傳遞一個類作爲參數

Object obj = mapper.readValue(myJsonString, MyPojo.class); 

出於某種原因,如果我創建一個實用程序類,做同樣的事情,我得到一個IO異常,當我使用readValue () 方法。當我打印c時,我得到:「class models.UserProfile」。當我打印出c.getClass()時,我得到「class java.lang.class」。我通過課程的方式有什麼問題嗎?

public static Object deserialize(String s, Class c) throws JsonParseException, JsonMappingException, IOException { 

    Object obj = mapper.readValue(s, c); 
    return obj; 
} 
+0

請顯示如何調用'deserialize()'。 'c'是正確的 - 回想它是一個'Class'對象的實例,所以'c.getClass()'的結果是可以預期的(所有對象都有這個方法,它顯示了對象是哪個類的實例的)。 –

+1

發佈堆棧跟蹤。 –

+1

另外,IOException的堆棧跟蹤會有所幫助。 – pmartin8

回答

0

您可以使用通用的打字:

MyPojo obj = mapper.readValue(myJsonString, MyPojo.class); 

public static <T> T deserialize(String s, Class<T> c) 
     throws JsonParseException, JsonMappingException, IOException { 
    return mapper.readValue(s, c); 
} 

MyPojo obj = Util.deserialize(myJsonString, MyPojo.class); 

你的實用方法,但是使用靜態mapper這可能不是一個好主意。

從不使用c.getName()發現奇怪的結果。 c.getClass()當然是Class

錯誤以某種方式通過c.getClass()。或者可能:映射器被重用。

+0

這並不能解釋問題中描述的I/O異常。 – Holger

+0

@好吧!我被泛型分散了。 –

0

你在找什麼可能是c.getName()而不是c.getClass()