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

Kotlin SpringBoot下Jackson实现boolean字段isAgent的严格必填校验

解决方案

1. 调整请求体模型的字段定义

把isAgent字段设为Kotlin默认的非空Boolean类型,并加上两个关键注解:

  • @JsonProperty(required = true):强制要求请求必须携带这个字段,没传直接校验失败
  • @field:NotNull:配合后续配置,确保字段值不能是Null

示例代码:

data class RequestModel(
    @JsonProperty(required = true)
    @field:NotNull
    val isAgent: Boolean
)

2. 配置Jackson做严格的Boolean解析

通过Spring配置,让Jackson别自作主张把空串、空格转成false,遇到这些非法输入直接报错。

用配置文件(application.yml)搞定

spring:
  jackson:
    deserialization:
      # 禁止把Null赋值给非空的Boolean类型
      allow-null-for-primitives: false
      # 只认JSON原生的true/false,拒绝字符串转布尔值
      accept-string-as-boolean: false

用代码配置类搞定(如果需要更灵活的配置)

@Configuration
class JacksonConfig {
    @Bean
    fun objectMapper(): ObjectMapper {
        return ObjectMapper()
            .registerModule(KotlinModule())
            .configure(DeserializationFeature.ALLOW_NULL_FOR_PRIMITIVES, false)
            .configure(MapperFeature.ACCEPT_STRING_AS_BOOLEAN, false)
    }
}

3. 开启控制器的校验功能

在你的REST控制器方法上加上@Valid注解,触发Spring的校验逻辑:

@RestController
@RequestMapping("/api")
class DemoController {
    @PostMapping("/test")
    fun handleRequest(@RequestBody @Valid request: RequestModel): ResponseEntity<String> {
        return ResponseEntity.ok("请求处理成功")
    }
}

为啥这套配置能满足需求?

  • 没传isAgent字段:@JsonProperty(required = true)会让Jackson直接抛出缺失必填字段的异常
  • 传了null:因为关了ALLOW_NULL_FOR_PRIMITIVES,Kotlin的非空Boolean接不住Null,Jackson直接报错
  • 传了空串/空格:关了ACCEPT_STRING_AS_BOOLEAN后,Jackson不认这种字符串转布尔的操作,直接解析失败
  • @NotNull相当于双重保险,确保经过Jackson解析后的字段值肯定合法

这样所有你提到的非法场景都会触发校验失败,完全不用写自定义反序列化器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:23:11