2

設定で DefaultTyping が有効になっている場合、Jackson ライブラリが Scala 列挙型のシリアル化に失敗していることがわかりOBJECT_AND_NON_CONCRETEます。設定を使用すると、シリアル化が正常に機能することに注意してくださいJAVA_LANG_OBJECT

以下の例外が表示されます

[scalatest]   com.fasterxml.jackson.databind.JsonMappingException: Type id handling not implemented for type scala.Enumeration$Val (by serializer of type com.fasterxml.jackson.module.scala.ser.EnumerationSerializer) (through reference chain: <MyType>)
[scalatest]   at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:284)
[scalatest]   at com.fasterxml.jackson.databind.SerializerProvider.mappingException(SerializerProvider.java:1110)
[scalatest]   at com.fasterxml.jackson.databind.SerializerProvider.reportMappingProblem(SerializerProvider.java:1135)
[scalatest]   at com.fasterxml.jackson.databind.JsonSerializer.serializeWithType(JsonSerializer.java:160)
[scalatest]   at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:706)
[scalatest]   at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689)
[scalatest]   at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)
[scalatest]   at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292)
[scalatest]   at com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2509)
[scalatest]   at com.fasterxml.jackson.core.base.GeneratorBase.writeObject(GeneratorBase.java:378)

これがサンプルコードです

  object Day extends Enumeration {
    val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
  }

  case class Holiday(day: Day.Value)

  val objectMapper = new ObjectMapper()
  objectMapper.registerModule(DefaultScalaModule)
  objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
  objectMapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false)
  objectMapper.enableDefaultTyping(DefaultTyping.OBJECT_AND_NON_CONCRETE, JsonTypeInfo.As.PROPERTY)

https://github.com/FasterXML/jackson-module-scala/wiki/Enumerations@JsonScalaEnumerationに記載されているように使用してみましたが、役に立たないようです。

前もって感謝します。

4

1 に答える 1