java/jackson - angekettet @JsonValue Anmerkungen und Deserialisierung

Habe ich die folgende Konstruktion. Ich weiß, es scheint seltsam, aber ich bin zu simulieren, unseren code mit diesem Beispiel:

public static class StringWrapper {
    protected final String s;

    @JsonValue
    public String getS() {
        return s;
    }

    public StringWrapper(final String s) {
        this.s = s;
    }
}

public static class StringWrapperOuter {
    protected final StringWrapper s;

    @JsonValue
    public StringWrapper getS() {
        return s;
    }

    public StringWrapperOuter(final StringWrapper s) {
        this.s = s;
    }
}

public static class POJO {
    protected final List<StringWrapperOuter> data;

    public List<StringWrapperOuter> getData() {
        return data;
    }

    public POJO(final List<StringWrapperOuter> data) {
        this.data = data;
    }

    public POJO() {
        data = Collections.emptyList();
    }
}

Serialisierung der POJO gibt die erwarteten JSON-array von strings:

<mapper>.writeValue(System.out, new POJO(Arrays.asList(new StringWrapperOuter(new StringWrapper("a")), new StringWrapperOuter(new StringWrapper("b")), new StringWrapperOuter(new StringWrapper("c")))));

{"data":["a","b","c"]}

Wie kann ich Deserialisieren dieser JSON-string in ein Objekt vom Typ POJO?

<mapper>.readValue("{\"data\":[\"a\",\"b\",\"c\"]}", POJO.class);

Der mapper hat Schwierigkeiten zu erkennen, der Eingang, der seit zwei @JsonValue Anmerkungen gefesselt sind. Es gibt folgende Ausnahme:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class StringWrapperOuter] from String value ('a'); no single-String constructor/factory method
 at [Source: {"data":["a","b","c"]}; line: 1, column: 10] (through reference chain: POJO["data"]->java.util.ArrayList[0])
InformationsquelleAutor John Dapy | 2014-12-29
Schreibe einen Kommentar