我有一个JSON有效负载,其结构如下:
{
"age": 12
}
它被Map到以下类:
public class Student {
private Integer age;
public Integer getAge(){return age;}
public void setAge(Integer age){this.age = age;}
}
此时,如果用户提交age
的浮点值,小数部分被忽略,只接受整数部分。我想做的是防止用户提交age
的浮点值有效负载(见下文)并抛出异常(类似于“第8行第5列的字段”age“的JSON值无效”-这是反序列化失败时的标准消息)。
{
"age": 12.7 // will be truncated to 12
}
我在考虑为数值实现一个自定义反序列化器,但我想知道是否有更简单的方法来实现这一点。
3条答案
按热度按时间brjng4g31#
关闭ACCEPT_FLOAT_AS_INT。您可以在https://github.com/FasterXML/jackson-databind/wiki/Deserialization-Features中查看更多详细信息
yr9zkbsy2#
当使用
ObjectMapper
的readValue()
方法将json字符串转换为java对象时,将调用setter
方法,在readValue()
方法中您可以检查值。请查看setter方法的签名,它接受String
而不是Integer
。示例代码:
57hvy0tb3#
默认情况下,从Jackson2.6开始,浮点值将被截断为整数值。如前一个答案所示,将
ACCEPT_FLOAT_AS_INT
设置为false
应该可以解决您的问题。