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

Kotlin中Retrofit响应枚举使用问题:下划线值解析失败

Retrofit枚举带下划线值解析失败的解决办法

问题根源

你遇到的问题是因为Retrofit默认使用的JSON解析库(比如Gson),默认会把枚举常量的名称和接口返回的字符串做精准匹配。但接口返回的door_open带下划线,而Kotlin/Java的枚举常量名称不能包含下划线,你没法定义一个叫door_open的枚举常量,自然匹配失败返回null;而close能正常工作,应该是你枚举里刚好有个同名的常量(比如close)。

最简单的解决方法:用注解绑定枚举与返回值

直接给枚举类的每个常量添加@SerializedName注解,显式指定它对应的接口返回字符串,示例代码如下:

修正后的DoorStatus枚举

import com.google.gson.annotations.SerializedName

enum class DoorStatus {
    @SerializedName("close")
    Close,

    // 绑定接口返回的"door_open"到枚举常量DoorOpen
    @SerializedName("door_open")
    DoorOpen
}

对应的LockStatus枚举(保持一致性)

import com.google.gson.annotations.SerializedName

enum class LockStatus {
    @SerializedName("Unlocked")
    Unlocked,

    @SerializedName("Locked")
    Locked
}

额外说明

如果你的Retrofit用的是Moshi而不是Gson,只需要把@SerializedName换成Moshi的@Json注解即可,逻辑完全一样。

这样配置后,不管接口返回的字符串是下划线格式还是其他格式,都能精准映射到对应的枚举常量,调用doorStatus.name就能正常获取枚举常量的名称(比如DoorOpen),不会再返回null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:40:33