使用 Gson 解析时设置默认枚举

Setting default Enum while parsing using Gson

我有一个用例,其中在使用 GSON 库将 JSON 解析为 POJO 时,我需要根据某些条件更改枚举的值。 条件就像

enum Status{
 A,B,C,D,DEFAULT
}

来自服务器的 JSON 类似于 "status":"A" 或 "B" 等。 假设在服务器端添加了一个新状态,如 "status":"G"。 对于上述响应,我想将状态设置为 DEFAULT 枚举类型。 解决此问题的最佳方法是什么?

我有两个选择。

  1. 使Status成为String

  2. 像这样使用 Gson 自定义反序列化器(Kotlin 示例)。

    class StatusDeserializer : JsonDeserializer<Status> {
        override fun deserialize(
            json: JsonElement,
            typeOfT: Type,
           context: JsonDeserializationContext
        ): Status {
            val jsonObject = json.asJsonObject
            return when(jsonObject.get("status").asString) {
                "A", "B", "C", "D" -> context.deserialize<Status>(jsonObject, Status::class.java)
                else -> Status.DEFAULT
            }
        }
    }
    
    val gson = GsonBuilder().registerTypeAdapter(Status::class.java, StatusDeserializer()).create()