2016-09-20 81 views
3

整數轉換我有一個簡單POJO:防止自動字符串傑克遜

public class ADate { 
    private Integer day; 
    private Integer month; 
    private Integer year; 
    ... // getters/setters/constructor 
} 

以下JSON文獻被正確地反序列化爲ADate

{ 
    "day":"10", 
    "month":"2", 
    "year":"1972" 
} 

傑克遜字符串到整數自動轉換。

有沒有辦法避免這種自動轉換,並且如果整數值定義爲字符串,Jackson會失敗。

+1

我有點困惑,你想整數作爲一個字符串或不?在任何情況下,映射器中都有一個配置: 'ObjectMapper mapper = new ObjectMapper(); mapper.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS,true);' 或者如果你不希望它爲String – Franjavi

+0

該設置似乎沒有任何區別。基本上我不希望系統接受帶有字符串代替數字的文檔 – Luciano

+0

您是否解決了您的問題?我面臨相同的行爲,無法找到配置來禁用此.. – quit

回答

1

我在Jackson github issues上找到了一些有趣的代碼。改變了一點,這就是我得到的:

public class ForceIntegerDeserializer extends JsonDeserializer<Integer> { 

    @Override 
    public int deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { 
     if (jsonParser.getCurrentToken() != JsonToken.VALUE_NUMBER_INT) { 
      throw deserializationContext.wrongTokenException(jsonParser, JsonToken.VALUE_STRING, "Attempted to parse String to int but this is forbidden"); 
     } 
     return jsonParser.getValueAsInt(); 
    } 
}