美文网首页
SpringBoot jackson反序列化把浮点数转为整型问题

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

作者: 捞月亮的阿汤哥 | 来源:发表于2021-04-10 15:30 被阅读0次

    问题描述

    今天遇到了一个很奇怪的问题,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.
         *<p>
         * 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反序列化把浮点数转为整型问题

          本文链接:https://www.haomeiwen.com/subject/znlnkltx.html