Json使用ObjectMapper.readValue反序列化问题

时间:2018-10-17 20:58:27

标签: json deserialization json-deserialization objectmapper

将json文件读取到班级时遇到了反序列化问题。 当我打电话     mapper.readValue(new FileInputStream(jsonFileName),Response.class);

我遇到以下错误:

[无法将类型ID'a10,b10,c10,d10'解析为[集合类型;类java.util.Set,包含[简单类型,类java.lang.String]]:找不到这样的类

我的Json文件如下所示

{
    "name":"response",
    "operator":{
      "__type":"com.sample.lib.operator.Add",
      "values":[
        "a10, b10, c10, d10"
      ]
    }
}

我有一个Response类:

public final class Response {

    private String name;

    private Operator op;

    public Response() {
        super();
    }

    public Response(final String name, final Operator op) {
        this.name = name;
        this.op = op;
    }

    public String getName() {
        return name;
    }

    public Rule getOperator() {
        return op;
    }
}

我有一个用于操作员的界面

@JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.PROPERTY,
        property = "__type")
@JsonSubTypes({
        @JsonSubTypes.Type(value = Add.class, name = "add")
})
public interface Operator {

    String getType();

    Set<String> getAll();
}

这是运算符的子类型

@JsonPropertyOrder({"__type","all"})
final class Add implements Operator{

    @JsonProperty("__type")
    private String __type = "add";

    @JsonProperty("scope")
    private final Set<String> all = new HashSet<>();

    public Add() {
        super();
    }

    public Add(final Set<String> list) {
        for (String s : list) {
            this.all.add(s);
        }
    }

    @Override
    public String getType() { return __type; }

    @Override
    public Set<String> getAll() { return all; } }
}

如果有人能指出我做错了地方,将不胜感激。

0 个答案:

没有答案