Проблема десериализации Json с использованием ObjectMapper.readValue - PullRequest
0 голосов
/ 17 октября 2018

Я столкнулся с проблемой десериализации при чтении моего файла json в мой класс.Когда я вызываю mapper.readValue (новый FileInputStream (jsonFileName), Response.class);

, я получаю следующую ошибку:

[Не удалось разрешить идентификатор типа '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"
      ]
    }
}

У меня естьКласс ответа:

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

Это будет очень ценитьсяесли кто-нибудь может указать мне, где я сделал неправильно.

...