我正在用 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"}
}
你应该向枚举类添加一个属性,并用@JsonValue
https://www.baeldung.com/jackson-serialize-enums 标记它