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
相关产品推荐
相关产品推荐

