Java Jackson-反序列化时防止将float转换为int
我有一个具有以下结构的JSON有效负载…
{"age": 12
}
…映射到以下类:
public class Student { private Integer age;
public Integer getAge(){return age;}
public void setAge(Integer age){this.age = age;}
}
目前,如果用户提交的浮点值age
,则将忽略小数,并且仅接受整数部分。我想要做的是防止用户提交带有浮动值的有效负载age
(请参见下文)并引发异常(类似于“第8列第5行的“年龄”字段的JSON值无效”),这是标准做法反序列化失败时出现错误消息)。
{"age": 12.7 // will be truncated to 12
}
我正在考虑为数字值实现自定义反序列化器,但想知道是否有更简单的方法来实现此目的。
回答:
在setter
使用转换JSON字符串转换成Java对象时方法将被调用ObjectMapper
的readValue()
方法,在这里你可以检查值。查看String
代替的setter方法的签名Integer
。
样例代码:
class Student { private int age;
public int getAge() {
return age;
}
public void setAge(String ageString) {
System.out.println("called");
try {
age = Integer.parseInt(ageString);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("age can't be in float");
}
}
}
...
try {
Student student = new ObjectMapper().readValue("{\"age\": 12.5}", Student.class);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
以上是 Java Jackson-反序列化时防止将float转换为int 的全部内容, 来源链接: utcz.com/qa/427629.html