Java 防止Jackson中的自动字符串到整数转换
我有一个简单的POJO:Java 防止Jackson中的自动字符串到整数转换,java,json,jackson,Java,Json,Jackson,我有一个简单的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自动将字符串转换为整数 如
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失败。我在Jackson github上找到了一些有趣的代码。稍微改变一下,这就是我得到的:
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();
}
}
公共类ForceIntegerDeserializer扩展JsonDeserializer{
@凌驾
公共int反序列化(JsonParser JsonParser,DeserializationContext DeserializationContext)引发IOException{
if(jsonParser.getCurrentToken()!=JsonToken.VALUE\u NUMBER\u INT){
抛出deserializationContext.ErrorTokenException(jsonParser,JsonToken.VALUE_STRING,“试图将字符串解析为int,但这是禁止的”);
}
返回jsonParser.getValueAsInt();
}
}
在ObjectMapper上有一个名为MapperFeature的配置设置。允许对标量进行强制。如果设置为false
,它将防止ObjectMapper将数字和布尔值的字符串表示形式强制转换为Java对应形式。只允许严格的转换
确切用法示例:
objectMapper.configure(MapperFeature.ALLOW_COERCION_OF_SCALARS, false);
参考资料:
[1] 添加MapperFeature.ALLOW_concurvation_OF_SCALARS
以启用/禁用强制#1106:
[2] 如果反序列化功能,防止将int
从空字符串强制为null
。原语的为true
\1095:
[3] 允许\u强制\u的\u标量我有点困惑,您是否希望整数作为字符串?在任何情况下,映射器中都有这样的配置:ObjectMapper mapper=new ObjectMapper();configure(JsonGenerator.Feature.WRITE_NUMBERS_为_字符串,true)
或false,如果您不想使用它,因为设置似乎没有任何区别。基本上,我不希望系统接受以字符串代替数字的文档。您是否解决了问题?我面临着同样的行为,无法找到配置来禁用此功能。您能告诉我将此文件放在何处以及如何将其用于我的Spring boot项目吗?@AbhisekRoy将其放在组件扫描中的任意位置,并使用JsonComponent注释,然后添加注释以对模型中的每个变量使用它吗?