【问题标题】:Deserialize JSON to Java Object containg Collection using Jackson使用 Jackson 将 JSON 反序列化为包含 Collection 的 Java 对象
【发布时间】:2013-05-17 09:16:12
【问题描述】:

我正在用杰克逊做一个非常简单的测试。我有一个类并将其对象用作 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":["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]

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

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

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

【问题讨论】:

  • 你创建TestJsonArray只是为了持有ArrayList吗?还是包含其他字段?
  • 这只是我真实应用程序的测试表格。我的真实应用程序还包含其他字段

标签: java json arraylist jackson deserialization


【解决方案1】:

尝试使用ObjectMapperreadValue 方法而不是convertValue

objectMapper.readValue(json, TestJsonArray.class);

这应该可以。

【讨论】:

  • 我想我正在这样做:TestJsonArray convertValue = objectMapper.convertValue(object, TestJsonArray.class);。我也用 JSONObject 的输入对其进行了测试,但仍然无法正常工作
  • 不要使用convertValue 它会抛出异常,使用readValue 方法。看我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2021-05-20
  • 2018-06-02
  • 1970-01-01
相关资源
最近更新 更多