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对象时方法将被调用ObjectMapperreadValue()方法,在这里你可以检查值。查看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

回到顶部