Jackson没有int / Int-argument构造函数/工厂方法从Number值反序列化

时间:2018-04-15 02:56:42

标签: java jackson

我将此作为部分JSON:

 "nextStages":[1]

我在Java中有这个:

private List<Integer> nextStages;
.....
public List<Integer> getNextStages() {
    return nextStages;
}
public void setNextStages(List<Integer> nextStages) {
    this.nextStages = nextStages;
}

我收到此错误:

 Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: 
 Cannot construct instance of `com.my.workflow.bean.json.StageObject` (although at least one Creator exists): no int/Int-argument constructor/factory method to deserialize from Number value (1)

那么我该如何进行正确的序列化/反序列化?

1 个答案:

答案 0 :(得分:1)

您需要发布整个JSONClasses,以便我们了解您的错误。

这对我来说很好用:

<强> test.json

{
  "nextStages":[1]
}

<强> StageObject.java

public class StageObject {

    private List<Integer> nextStages;

    public List<Integer> getNextStages() {
        return nextStages;
    }
}

这里我正在阅读JSON文件,将其映射到StageObject并将其写入输出。

public class ReadTestJSON {
    public static void main(String[] args)
        throws IOException
    {
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        StageObject stageObject = mapper.readValue(new File("test.json"), StageObject.class);
        mapper.writeValue(System.out,stageObject);
    }
}

<强>输出:

{
  "nextStages" : [ 1 ]
}

希望这有帮助。