SpringBoot jackson反序列化把浮点数转为整型问题

问题描述

今天遇到了一个很奇怪的问题,spring boot的版本是2.0.9,jackson的版本是2.9.8。
我有个类的成员变量类型是integer,然后前端传参的时候传了个浮点数20.5,在controller获取到参数的时候自动截断为20。

问题解决

有些场景,比如需要参数校验,不希望float可以自动截断,希望快速失败,所以需要设置下。
源码DeserializationFeature这个类,控制反序列化的特性。
可以看到ACCEPT_FLOAT_AS_INT这个特性在2.6后默认是true,

/**
     * Feature that determines whether coercion from JSON floating point
     * number (anything with command (`.`) or exponent portion (`e` / `E'))
     * to an expected integral number (`int`, `long`, `java.lang.Integer`, `java.lang.Long`,
     * `java.math.BigDecimal`) is allowed or not.
     * If enabled, coercion truncates value; if disabled, a {@link JsonMappingException}
     * will be thrown.
     *

* Feature is enabled by default. * * @since 2.6 */ ACCEPT_FLOAT_AS_INT(true),

所以需要对其的这个设置进行修改。
在application.yaml文件输入

spring:
  jackson:
    deserialization:
      ACCEPT_FLOAT_AS_INT: false

重新进行请求

对于integer类型的参数,重新传浮点数,会报序列化错误的失败,问题解决。

你可能感兴趣的:(SpringBoot jackson反序列化把浮点数转为整型问题)