You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring中Jackson缺失JSON数值反序列化为0.0,如何触发Bad Request?

解决Spring Kotlin数据类缺失字段未触发BAD REQUEST的问题

当前你的Kotlin数据类中,upper和lower都是非空的Double类型。Jackson默认会对缺失的数值类型字段填充默认值(比如0.0),而不是将其视为请求参数缺失,因此不会触发400 BAD REQUEST。要实现你期望的行为,可通过以下两种方案配置:

方案一:针对字段配置校验

将字段改为可空类型,并通过@JsonProperty(required = true)标记为必填。这样Jackson在反序列化时,若检测到字段缺失会直接抛出异常,Spring会自动转为400响应:

@JsonIgnoreProperties(ignoreUnknown = true)
data class MandatoryLimits(
    @JsonProperty(required = true)
    val upper: Double?,

    @JsonProperty(required = true)
    val lower: Double?
)

使用可空类型是为了避免Jackson自动填充默认值,同时required = true明确要求该字段必须存在于请求体中。

方案二:全局配置Jackson严格校验

在Spring Boot中,可以通过全局配置让Jackson对构造函数的必填参数缺失时抛出异常:

方式1:通过配置类实现

@Configuration
class JacksonConfig {
    @Bean
    fun objectMapper(): ObjectMapper {
        return ObjectMapper()
            .registerModule(KotlinModule())
            // 构造函数必填参数缺失时抛出异常
            .configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, true)
            // 可选:开启非空参数传入null时的校验
            .configure(DeserializationFeature.FAIL_ON_NULL_CREATOR_PROPERTIES, true)
    }
}

方式2:通过配置文件实现(application.properties)

# 开启构造函数必填参数缺失校验
spring.jackson.deserialization.fail-on-missing-creator-properties=true
# 可选:开启非空参数传入null时的校验
spring.jackson.deserialization.fail-on-null-creator-properties=true

这种方式无需修改数据类,全局生效后,所有Kotlin数据类的必填构造参数缺失时都会触发400响应。

注意:@JsonIgnoreProperties(ignoreUnknown = true)仅用于忽略请求中未知的字段,不会影响必填字段的校验逻辑,可以保留。

内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:15:37