java - 使用自定义 jackson 序列化器替换Enum值

标签 java json spring kotlin jackson

我正在Kotlin中编写一个Spring Boot项目。我拥有的POJO /数据类之一

data class Employee(
        //... other properties
        val designation: Designation
)

enum class Designation {
    JUN, MID, SEN
}

默认情况下,此Employee对象序列化为{"designation" : "JUN"}。我想添加一个自定义序列化程序,以便该对象将像{"designation" : "Junior"}这样进行序列化。

我添加的序列化器,

@JsonComponent
class DesignationSerialization {
    class Serializer: JsonObjectSerializer<Designation>() {
        override fun serializeObject(designation: Designation, gen: JsonGenerator, provider: SerializerProvider) {
            gen.writeString(designation.pretty)
        }

        private val Designation.pretty: String
            get() = when(this) {
                Designation.JUN -> "Junior"
                Designation.MID -> "Mid-Level"
                Designation.SEN -> "Senior"
            }
    }
}

但是在运行此程序时,出现此错误,
JSON encoding error: Can not write a string, expecting field name (context: Object); nested exception is com.fasterxml.jackson.core.JsonGenerationException: Can not write a string, expecting field name (context: Object)

我也尝试过使用gen.writeStringField("designation", designation.pretty),但是这样可以序列化对象
{
"designation": {"designation": "Mid-Level"}
}

最佳答案

您应该在枚举类中添加一个属性,并用@JsonValue标记https://www.baeldung.com/jackson-serialize-enums

关于java - 使用自定义 jackson 序列化器替换Enum值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62143197/

相关文章:

java - 如何强制 Mybatis 使用动态条件进行区分大小写的选择

php - 解析 JSON 数组 PHP - 字符串和 float

java - 如何使用 Spring Security 5 OAuth2 客户端和 RestTemplate 刷新 OAuth2 token

spring - org.hibernate.hql.internal.ast.QuerySyntaxException : EdbmsEmployee is not mapped [from EdbmsEmployee edbmsEmployee where edbmsEmployee. 员工 ID=?]

Spring Data JPA Query by Example,可以访问嵌套的对象属性

java - 如何在不带扩展名的 XSL 中将 ASCII 字符串转换为 base64?

java - 长按后上下文操作栏太慢

java - Android 应用程序在运行时不会停止崩溃,ParseInt 出现问题

javascript - 如何在 JSFiddle 中使用 localhost URL 的 getJSON 返回键/值对?

python - 用BeautifulSoup解析XML