防止自动字符串杰克逊
问题描述:
整数转换我有一个简单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会失败。
答
我在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();
}
}
我有点困惑,你想整数作为一个字符串或不?在任何情况下,映射器中都有一个配置: 'ObjectMapper mapper = new ObjectMapper(); mapper.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS,true);' 或者如果你不希望它为String – Franjavi
该设置似乎没有任何区别。基本上我不希望系统接受带有字符串代替数字的文档 – Luciano
您是否解决了您的问题?我面临相同的行为,无法找到配置来禁用此.. – quit