【问题标题】:Deserialization "[]" json as empty list反序列化“[]” json 为空列表
【发布时间】:2016-11-09 12:12:34
【问题描述】:

我有一个带有List<BigInteger> listField 的课程。该字段的 JSON 部分类似于 "listField":"[]"。我使用以下代码进行反序列化:

ObjectMapper mapper = new ObjectMapper();
MyClass myClass = mapper.readValue(jsonAsString, MyClass.class);

但是抛出异常:

com.fasterxml.jackson.databind.JsonMappingException:无法将 java.util.ArrayList 的实例反序列化出 VALUE_STRING 令牌

fasterxml.jackson 2.2.3 版

您能帮我解决这个问题吗?

【问题讨论】:

  • 为什么JSON字段是"listField":"[]"而不是"listField":[]
  • @khelwood,这是服务器响应。是不是json错了?
  • [] 是 JSON 中的空数组。 "[]" 是一个包含两个括号的字符串。如果您期望它是一个数组,那就错了。
  • @khelwood,你是对的。服务器端有@JsonSerialize(using = ToStringSerializer.class) 注释。但是我可以从这个字符串值中检索列表吗?

标签: java json serialization


【解决方案1】:

除了自定义反序列化器之外,还可以添加新设置器并忽略旧设置器。它对我有帮助。

    @JsonProperty("listField")
    public void setListFieldAsString(String listFieldAsString) {
        List<BigInteger> listFieldAsList = new ArrayList<BigInteger>();

        try {
            ObjectMapper objectMapper = new ObjectMapper();
            listFieldAsList = objectMapper.readValue(listFieldAsString, new TypeReference<List<BigInteger>>() {});
        } catch (IOException e) {
            System.out.println("Error was detected!");
        }
        setListField(listFieldAsList);
    }

    @JsonIgnore
    public void setListField(List<BigInteger> listField) {
        this.listField = listField;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多