Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java/jackson-chained@JsonValue注释和反序列化_Java_Jackson_Deserialization - Fatal编程技术网

java/jackson-chained@JsonValue注释和反序列化

java/jackson-chained@JsonValue注释和反序列化,java,jackson,deserialization,Java,Jackson,Deserialization,我有以下结构。我知道这看起来很奇怪,但我用这个例子模拟我们的代码: public static class StringWrapper { protected final String s; @JsonValue public String getS() { return s; } public StringWrapper(final String s) { this.s = s; } } public sta

我有以下结构。我知道这看起来很奇怪,但我用这个例子模拟我们的代码:

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

@JsonValue
用于序列化。反序列化的类似注释是
@JsonCreator

注释您的构造函数

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


正如索蒂里奥斯在先前的回答中所说的那样。
@JsonCreator
是这里的关键。但是,为了让所有类都工作,可能需要
@JsonProperty

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

    // In order for POJO creation to work properly the @JsonProperty
    // annotation on the arg is required
    @JsonCreator
    public POJO(@JsonProperty("data") final List<StringWrapperOuter> data) {
        this.data = data;
    }

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

public static class StringWrapper {
    protected final String s;

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

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

public static class StringWrapperOuter {
    protected final StringWrapper s;

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

    @JsonValue
    public StringWrapper getS() {
        return s;
    }
}
公共静态类POJO{
受保护的最终清单数据;
//为了使POJO创建正常工作,@JsonProperty
//参数上的注释是必需的
@JsonCreator
公共POJO(@JsonProperty(“数据”)最终列表数据){
这个数据=数据;
}
公共列表getData(){
返回数据;
}
}
公共静态类StringWrapper{
受保护的最终字符串s;
@JsonCreator
公共字符串包装器(最终字符串s){
这个.s=s;
}
@JsonValue
公共字符串get(){
返回s;
}
}
公共静态类StringWrapperOuter{
受保护的最终纵梁;
@JsonCreator
公共StringWrapper外部(最终StringWrapper){
这个.s=s;
}
@JsonValue
公共StringWrapper get(){
返回s;
}
}
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])
@JsonCreator
public StringWrapper(final String s) {
    this.s = s;
}
@JsonCreator
public StringWrapperOuter(final StringWrapper s) {
    this.s = s;
}
public static class POJO {
    protected final List<StringWrapperOuter> data;

    // In order for POJO creation to work properly the @JsonProperty
    // annotation on the arg is required
    @JsonCreator
    public POJO(@JsonProperty("data") final List<StringWrapperOuter> data) {
        this.data = data;
    }

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

public static class StringWrapper {
    protected final String s;

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

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

public static class StringWrapperOuter {
    protected final StringWrapper s;

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

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