我有一个愚蠢的问题让我有点吃惊。我有一个枚举和一个数据类,如下所示:
enum class MyEventType(val typeName: String) {
FIRST("firstEventReceived")
}
data class MyEvent(
val id: String,
val event: MyEventType
)
我需要将其作为json字符串发送,但普通的desarilizer会生成这样的json
{
"id": "identifier",
"event": "FIRST"
}
但我需要
{
"id": "identifier",
"event": "firstEventReceived"
}
据我所知,Kotlin允许在数据类中重写getter,但我没有成功......
data class MyEvent(
val id: String
) {
val event: MyEventType get() event.typeName
}
但我想我错过了什么。
3条答案
按热度按时间wpx232ag1#
最简单的方法可能是使用
@JsonValue
来注解属性:印刷品:
bfhwhh0e2#
最简单的方法是用
@JsonValue
来注解typeName
,这将根据需要对枚举字段进行序列化和反序列化。另一种选择是使用
@JsonFormat
(如果您使用的是Jackson版本〈2.9);赫勒尔的一个例子;
你得到了输出;
我使用的是Jackson2.12.0版。这里有一个关于Jackson的枚举操作的好读物-https://www.baeldung.com/jackson-serialize-enums
sd2nnvve3#
此外,您还可以拥有包含2个以上字段的枚举,这些字段是您希望序列化的
您可以选择以下两个选项之一:
1.将**@JsonValue放在一个方法**上(我们称之为getter),该方法将返回所需的值(* 如果您只需要部分字段 *):
结果将为
"{firstField: firstFieldValue, thirdField: thirdFieldValue}"
1.将**@JsonFormat(shape = JsonFormat. shope.OBJECT)放在你的枚举**类上(用于序列化类作为通用类):
结果将为
"{"firstField": "firstFieldValue", "secondField": "secondFieldValue", "thirdField": "thirdFieldValue"}"