我有一个具有以下结构的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
{ "age": 12.7 // will be truncated to 12 }
我正在考虑为数字值实现自定义反序列化器,但想知道是否有更简单的方法来实现此目的。
在setter使用转换JSON字符串转换成Java对象时方法将被调用ObjectMapper的readValue()方法,在这里你可以检查值。查看String代替的setter方法的签名Integer。
setter
ObjectMapper
readValue()
String
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(); }