2015-09-23 2 views
0

Так что я использую метод com.fasterxml.jackson readValue, который отлично работает. Он принимает в JSon строки и POJO, который заполняется и сохраняется в OBJ:Передача класса в качестве параметра в Java

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

По какой-то причине, если я создаю класс Util, который делает то же самое, я получаю исключение ввода-вывода, когда я использую readValue(). Когда я печатаю c, я получаю: «class models.UserProfile». Когда я печатаю c.getClass(), я получаю «класс 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

Кроме того, поможет stacktrace вашего 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, который не может быть такой хорошей идеей.

The weirdness found results from not using c.getName(). c.getClass() - это, конечно, Class.

Ошибка c.getClass() как есть. Или как можно скорее: картограф повторно используется.

+0

Это не объясняет исключение I/O, описанное в вопросе. – Holger

+0

@ Holger правый! Я был отвлечен своими дженериками. –

0

Возможно, что вы ищете c.getName(), а не c.getClass().

Смежные вопросы