Spring Jackson Serialization of Scala Enumeration



我试图通过杰克逊让春天序列化我的scala枚举。 据我所知,我需要遵循以下条件:https://github.com/FasterXML/jackson-module-scala/wiki/Enumerations

我正在使用 Scala 版本 2.12.6 和 Spring Boot 版本 2.0.3

我的枚举看起来像:

object MyEnum extends Enumeration {
type MyEnum = Value
val VALUE_1 = Value("Value 1")
val VALUE_2 = Value("Value 2")
}
class MyEnumTypeReference extends TypeReference[MyEnum.type]

我的实体如下所示:

@Entity
@Table(name = "TABLE", schema = "schema")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class MyEntity(var myId: String, var someOtherThing: String, @JsonScalaEnumeration(classOf[MyEnumTypeReference]) var myEnum: MyEnum.MyEnum) extends Serializable {
def this() = this(null, null, null)
def this(myId: String, myEnum: MyEnum.MyEnum) = this(myId, myEnum)
// Getters and Setters
}

当我到达查询此实体的 spring 端点时,我得到:

[
{
"myId": "123456",
"someOtherThing": "I'm a String",
"myEnum": {}
}
]

我已经验证了通过控制器中的 ReponseEntity 返回的实体是否包含枚举的值。 我不知道为什么枚举只有一个空对象而不是序列化的对象? 提前谢谢。

编辑:我还直接使用我在 spring 配置中设置的对象映射器对其进行了测试,它在那里正确序列化枚举。 我还在我的控制器中尝试了自动接线弹簧对象映射器,它在那里也正确序列化。

由于我无法让它工作,我不得不走使用密封特征和案例类来模拟枚举的路线。这需要将我的休眠逻辑更新为更复杂的逻辑,但现在我可以(反(序列化我的 spring 枚举。

我的新枚举:

sealed trait MyEnum extends Product with Serializable { def myEnum: String }
object MyEnum {
case object VALUE_1 extends MyEnum { @JsonProperty("value") val myEnum = "Value 1" }
case object VALUE_2 extends MyEnum { @JsonProperty("value") val myEnum = "Value 2" }
def values(): List[MyEnum] = List(VALUE_1, VALUE_2)
// Other Enum Functions
}

我还从我的实体中删除了@JsonScalaEnumeration,因为它不再使用 scala 的枚举。

我的响应现在如下所示:

[
{
"myId": "123456",
"someOtherThing": "I'm a String",
"myEnum": {
"value": "Value 1"
}
}
]

最新更新