問題描述
今天遇到了一個(gè)很奇怪的問題高每,spring boot的版本是2.0.9,jackson的版本是2.9.8。
我有個(gè)類的成員變量類型是integer践宴,然后前端傳參的時(shí)候傳了個(gè)浮點(diǎn)數(shù)20.5鲸匿,在controller獲取到參數(shù)的時(shí)候自動(dòng)截?cái)酁?0。
問題解決
有些場景阻肩,比如需要參數(shù)校驗(yàn)带欢,不希望float可以自動(dòng)截?cái)啵M焖偈】揪孕枰O(shè)置下乔煞。
源碼DeserializationFeature這個(gè)類,控制反序列化的特性柒室。
可以看到ACCEPT_FLOAT_AS_INT這個(gè)特性在2.6后默認(rèn)是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),
所以需要對其的這個(gè)設(shè)置進(jìn)行修改图甜。
在application.yaml文件輸入
spring:
jackson:
deserialization:
ACCEPT_FLOAT_AS_INT: false
重新進(jìn)行請求
對于integer類型的參數(shù),重新傳浮點(diǎn)數(shù)伙狐,會報(bào)序列化錯(cuò)誤的失敗,問題解決墩瞳。