使用自定义杰克逊序列化程序替换枚举值



我正在用 Kotlin 编写一个 Spring 启动项目。我拥有的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"}
}

你应该向枚举类添加一个属性,并用@JsonValuehttps://www.baeldung.com/jackson-serialize-enums 标记它

最新更新