簡體   English   中英

Jackson 為空時反序列化 Yaml Map

[英]Jackson deserialize Yaml Map when it is empty

我正在嘗試將 YAML map 反序列化為 Java Z46F3EA056CAA3126B91F3F70BEEA068 的簡單字符串值:C

myMap:
  key: value
myMap:
#  key: value

這是反序列化后要創建的 Java Pojo:

class Config {

 @JsonProperty Map<String, String> myMap;

 public Config() {}

 public Config(Map<String, String> myMap) { this.myMap = myMap; }

 public Map<String, String> getMyMap() { return myMap; }

 @Override
 public String toString() {
   return "Config{" + "map=" + myMap + '}';
 }
}

主要是:

public static void main(String[] args) throws IOException {

  ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
  String yaml = ".."

  Config config = mapper.readValue(yaml, Config.class);
  System.out.println(config);
}

該項目使用這些依賴項:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.1.4</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-yaml</artifactId>
  <version>2.1.4</version>
</dependency>

yaml = "myMap:\n" + " key: somevalue"的情況下,反序列化工作正常,我們可以看到Config{myMap={key=somevalue}}

如果是yaml = "myMap:\n" + ""; (空或注釋條目),Jackson 記錄這些錯誤:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [map type; class java.util.LinkedHashMap, [simple type, class java.lang.String] -> [simple type, class java.lang.String]] from String value; no single-String constructor/factory method (through reference chain: com.example.Config["myMap"])...

我該如何管理注釋行或沒有提供鍵/值對的情況?

YAML 塊式 map 與您使用的一樣,隱含地從第一個鍵/值對開始。 因此,在沒有鍵/值對的情況下,不會啟動 map - myMap的值將是空標量。 Jackson 將空標量加載為空字符串,這會導致錯誤。

為了緩解這種情況,您需要將該值顯式設置為空 map:

myMap: {}

{}是流式空 map。

暫無
暫無

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

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