问题描述
今天遇到了一个很奇怪的问题,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类型的参数,重新传浮点数,会报序列化错误的失败,问题解决。
网友评论