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());
}
}
}
我沒事隨着改變,但這只是導致在地圖中的一個空鍵。我將如何過濾它? –
我無法從傑克遜身上找出任何東西(並不是說排除了它,我只是無法找到一個)。不知道是否從這張地圖創建另一個地圖,並在過程中不包括空鍵&它的價值將爲你工作 –
看看'MapDeserializer',你可能是正確的。 –