2013-05-17 2 views
0

Я делаю очень простой тест с Джексоном. У меня есть класс и используйте его объект как параметр и возвращаемое значение метода Джерси. Класс:Deserialize JSON to Java Object containg Коллекция с использованием Jackson

import java.util.List; 

public class TestJsonArray { 

    private List<String> testString; 

    public List<String> getTestString() { 
     return testString; 
    } 

    public void setTestString(List<String> testString) { 
     this.testString = testString; 
    } 
} 

У меня есть метод Джерси, который пытается добавить одну строку в тестовом списке строку

@Path("/arrayObj") 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Object createObjectArray(@QueryParam("param") String object) throws JsonGenerationException, JsonMappingException, IOException { 
     ObjectMapper objectMapper = new ObjectMapper(); 
     TestJsonArray convertValue = objectMapper.convertValue(object, TestJsonArray.class); 
     convertValue.getTestString().add("hello"); 
     return objectMapper.writeValueAsString(convertValue); 
    } 

Когда я называю этот метод с параметром

{ "testString": ["Hi"]}

Получаю исключение:

java.lang.IllegalArgumentException: Can not construct instance of test.rest.TestJsonArray, problem: no suitable creator method found to deserialize from JSON String 
at [Source: N/A; line: -1, column: -1] 

Исключение выбрасывается в десериализации processs:

TestJsonArray convertValue = objectMapper.convertValue (объект, TestJsonArray.class);

Мне интересно, почему это исключение выбрасывается. Что я делаю не так?

+0

Вы создали 'TestJsonArray' только для того, чтобы провести' ArrayList'? или он содержит другие поля? – sanbhat

+0

Это всего лишь тестовая форма моего реального приложения. Мое настоящее приложение содержит также другие поля – pokeRex110

ответ

4

попробовать readValue метод ObjectMapper вместо convertValue

objectMapper.readValue(json, TestJsonArray.class); 

это должно работать.

+0

Я думаю, что я делаю это в: 'TestJsonArray convertValue = objectMapper.convertValue (object, TestJsonArray.class);'. Я тестировал его также с помощью ввода как JSONObject, но все же не работает – pokeRex110

+1

не использовать 'convertValue', он генерирует исключение, использует метод readValue. Смотрите мой пост. – sanbhat

+0

Ваш ответ правильный. ;). спасибо – pokeRex110

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