2016-09-20 46 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(); 
    } 
}