【发布时间】:2020-09-20 09:38:33
【问题描述】:
我正在用 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不够用有什么特别的原因吗?
标签: java json spring kotlin jackson