簡體   English   中英

Jackson 將字符串列表反序列化為字符串

[英]Jackson deserialize list of strings to a string

有沒有一種簡單的方法可以將字符串列表反序列化為單個字符串?

例如,我會有這個 JSON:

{
    "stringList": [
        "somethingElse"
    ],
    "simpleString": "something",
}

我希望將其反序列化為這個 POJO:

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AClass {

    @JsonProperty("stringList")
    private String justAString;

    @JsonProperty("simpleString")
    private String someString;
}

我想提一下,可以肯定的是,該列表只有一項,並且無法控制它的生成方式。 是為justAString字段使用自定義反序列化器的唯一方法嗎?

編輯如果可能的話,我想使用 Jackson 的ObjectMapper

一種方法是對需要轉換的屬性使用替代的 getter/setter 方法, @JsonProperty注釋從字段移動到 getter 方法,添加一組額外的 getter/setter 方法,並使用@JsonIgnore以便ObjectMapper不會使用它們:

class AClass {

    private String justAString;
    private String someString;

    @JsonProperty // JSON field named same as virtual property
    private List<String> getStringList() { // Getter for virtual property (private = hidden from Java callers)
        return Collections.singletonList(this.justAString);
    }

    private void setStringList(List<String> stringList) { // Setter for virtual property
        this.justAString = stringList.toString();
    }

    @JsonIgnore // This POJO property is not a JSON field
    public String getJustAString() { // Standard POJO getter
        return this.justAString;
    }

    public void setJustAString(String justAString) { // Standard POJO setter
        this.justAString = justAString;
    }

    @JsonProperty("simpleString") // JSON field named different from POJO property
    public String getSomeString() { // Standard POJO getter
        return this.someString;
    }

    public void setSomeString(String someString) { // Standard POJO setter
        this.someString = someString;
    }

}

測試

String input = "{\r\n" + 
               "    \"stringList\": [\r\n" + 
               "        \"somethingElse\"\r\n" + 
               "    ],\r\n" + 
               "    \"simpleString\": \"something\"\r\n" + 
               "}";
AClass aClass = new ObjectMapper().readValue(input, AClass.class);
System.out.println("justAString = " + aClass.getJustAString());
System.out.println("someString = " + aClass.getSomeString());

輸出

justAString = [somethingElse]
someString = something

這個 :

@JsonProperty("stringList")
private String justAString;

應該是一個字符串列表,你不覺得嗎??

@JsonProperty("stringList")
private List<String> justAString;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM