【scala】scala枚举类最佳实现及其jackson序列化方式
参考文章:
官网参考:
jackson是支持scala内部的Enumeration的,但是jackson版本需要新一些,比如2.14后。
jackson github
jackson-module-scala github
enumeratum github
scala各个枚举类方式对比:
最好的就是:
scala2: sealed trait/abstract class + case object,并继承第三方enumeratum
方式,其中enumeratum
作用就是使用了内部findValues
方法便于获取所有单例。
scala3: 内置的enum实现,暂时不晓得咋用
Using Enumerations in Scala Best Practices
Scala Enumerations
springboot默认使用jackson,需要配置jackson moulde的实现
Spring Boot集成Scala
上代码:
import com.fasterxml.jackson.annotation.{JsonTypeInfo}
import enumeratum._
import net.minidev.json.annotate.JsonIgnore
// 最好所有field都配置上@JsonIgnore
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@clazz")
sealed abstract class Direction(@JsonIgnore index: Int, @JsonIgnore name: String) extends EnumEntry
object Direction extends Enum[Direction] {
val values = findValues
case object From extends Direction(0, "from")
case object To extends Direction(1, "to")
}
测试:
import com.fasterxml.jackson.core.`type`.TypeReference
import com.fasterxml.jackson.databind.json.JsonMapper
import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.{ClassTagExtensions, DefaultScalaModule, JsonScalaEnumeration, ScalaObjectMapper}
import enumeratum._
import org.scalatest.FunSuite
case class SealedDemo(name: String, direction: Direction)
class JacksonTest extends FunSuite {
def getMapper() = {
val jackson = JsonMapper.builder()
.addModule(DefaultScalaModule)
.build() :: ClassTagExtensions
jackson.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
jackson
}
test("sealed-seri-deseri") {
val mapper = getMapper()
val obj01 = SealedDemo("test", Direction.To)
val str01 = mapper.writeValueAsString(obj01)
// {"name":"test","direction":{"@clazz":"xxx.utils.Direction$To$"}}
println(str01)
val obj02=mapper.readValue(str01,classOf[SealedDemo])
println(obj02)
// SealedDemo(test,To)
}
}
原文地址:https://blog.csdn.net/lisacumt/article/details/136215426
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!