2015-07-04 24 views
0

我使用自定義密鑰解串器反序列化Jackson的Map,然後在使用它之前轉換密鑰。我想避免使用空鍵,所以我試圖配置傑克遜放棄該條目並繼續前進,但似乎無法找到正確的註釋。我註釋我的map財產@JsonInclude@JsonIgnoreProperties@JsonFilter沒有運氣。如何讓傑克遜忽略無法使用自定義KeyDeserializer進行反序列化的密鑰?

ObjectMapper mapper = new ObjectMapper(); 

System.out.println(mapper.readValue("{ \"map\": { \"0\": \"zero\", \"1\": \"one\" } }", Test.class).map); // Works 
System.out.println(mapper.readValue("{ \"map\": { \"0\": \"zero\", \"one\": \"one\" } }", Test.class).map); // Fails 

這裏是我反序列化類:

public class Test { 
    @JsonDeserialize(keyUsing = StringIntKeyDeserializer.class, contentAs = String.class) 
    public Map<Integer, String> map; 
} 

而且我KeyDeserializer

public class StringIntKeyDeserializer extends KeyDeserializer { 
    @Override 
    public Object deserializeKey(String key, DeserializationContext ctxt) throws IOException, JsonProcessingException { 
     try { 
      return Integer.parseInt(key); 
     } catch (NumberFormatException e) { 
      throw ctxt.weirdKeyException(Integer.class, key, e.toString()); 
     } 
    } 
} 

回答

0

StringIntKeyDeserializer,而不是拋出一個異常,返回null

+0

我沒事隨着改變,但這只是導致在地圖中的一個空鍵。我將如何過濾它? –

+0

我無法從傑克遜身上找出任何東西(並不是說排除了它,我只是無法找到一個)。不知道是否從這張地圖創建另一個地圖,並在過程中不包括空鍵&它的價值將爲你工作 –

+0

看看'MapDeserializer',你可能是正確的。 –