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

Spring Kotlin中以is开头的数据类属性返回JSON为空的解决方法

解决Kotlin数据类isActive属性JSON序列化为空的问题

针对你遇到的isActive属性JSON返回为空、仅改名为active就正常的问题,无需修改属性名的解决办法如下:

1. 确认引入Jackson Kotlin模块

Kotlin数据类的Jackson序列化依赖专门的Kotlin模块,若缺失该模块,注解可能无法生效。

Gradle依赖(Kotlin DSL)

implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2")

Maven依赖

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-kotlin</artifactId>
    <version>2.15.2</version>
</dependency>

2. 确保使用正确的@JsonProperty注解包

检查注解是否来自com.fasterxml.jackson.annotation.JsonProperty,而非其他JSON库的同名注解。正确代码示例:

import com.fasterxml.jackson.annotation.JsonProperty

data class ResponseResult(
    @JsonProperty("isActive")
    val isActive: String
)

3. 配置ObjectMapper禁用自动去除is前缀的行为

Jackson默认会对is开头的属性自动去除前缀并转小写(比如isActive会被序列化为active),可通过配置覆盖该行为:

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.PropertyNamingStrategies
import com.fasterxml.jackson.module.kotlin.registerKotlinModule

val objectMapper = ObjectMapper()
    .registerKotlinModule()
    .setPropertyNamingStrategy(PropertyNamingStrategies.LOWER_CAMEL_CASE)
    .configure(com.fasterxml.jackson.databind.MapperFeature.USE_STD_BEAN_NAMING, false)

也可以用@JsonGetter显式指定序列化字段名:

import com.fasterxml.jackson.annotation.JsonGetter

data class ResponseResult(
    val isActive: String
) {
    @JsonGetter("isActive")
    fun getIsActive() = isActive
}

4. 排查是否混用其他JSON序列化库

若项目同时引入Gson、Fastjson等库,可能导致Jackson注解失效,确保序列化时使用Jackson的ObjectMapper而非其他库的工具类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:05:02