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

Spring Boot结合Kotlin使用@JsonComponent时isAdmin字段JSON序列化丢失问题

问题触发原因
  • 根本原因是Jackson默认遵循的Java Bean命名规范,与Kotlin数据类自动生成的Getter方法命名逻辑产生了冲突:
    1. Java Bean规范规定:只有返回原生boolean/包装类Boolean类型的isXxx()格式方法,才会被识别为对应属性的Getter;非布尔类型的属性Getter必须是getXxx()格式才会被默认识别。
    2. Kotlin对所有以is开头的val属性,无论属性类型是什么,都会自动生成isXxx()格式的Getter方法。
    3. 你的isAdmin字段类型是自定义的BooleanValue,不是布尔类型,Jackson会把自动生成的isAdmin()方法判定为非合法Getter,认为HaveBoolean类没有可序列化的公开属性,最终返回空JSON{}。
    4. 当你把字段名改为hoge后,Kotlin自动生成的Getter是符合非布尔类型规则的getHoge(),Jackson可以正常识别,因此序列化结果正常。
解决方案

你可以选择以下任意一种方式解决问题:

  • 给isAdmin字段添加@JsonProperty注解,强制Jackson识别该序列化属性:
data class HaveBoolean(
    @get:JsonProperty("isAdmin") val isAdmin: BooleanValue,
)
  • 调整Jackson全局序列化配置,允许非布尔类型的isXxx()方法被识别为Getter,Spring Boot项目可以在application.yml中添加如下配置:
spring:
  jackson:
    mapper:
      allow-is-getter-for-non-boolean: true
  • 调整非布尔类型字段的命名规则,避免使用is作为前缀,从根源上避免命名冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:15:02