使用Jackson将JSON反序列化为包含Collection的Java对象

时间:2013-05-17 09:16:12

标签: java json arraylist jackson deserialization

我和杰克逊进行了一次非常简单的测试。我有一个类,并使用其对象作为参数和Jersey方法的返回值。 课程是:

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

我有一个Jersey方法,试图将一个字符串添加到列表测试字符串

@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”:[ “您好”]}

我得到一个例外:

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]

反序列化过程中抛出异常:

  

TestJsonArray convertValue = objectMapper.convertValue(object,   TestJsonArray.class);

我想知道为什么抛出这个异常。我做错了什么?

1 个答案:

答案 0 :(得分:4)

尝试使用readValue代替ObjectMapper

convertValue方法
objectMapper.readValue(json, TestJsonArray.class);

这应该有效。