次の形式の JSON があります。
{
"inventory": [
{
"productType": "someProduct1",
"details": {
"productId": "Some_id",
"description": "some description"
}
},
{
"productType": "someProduct2",
"details": {
"productId": "Some_id",
"description":{"someKey":"somevalue"}
}
}
]
}
上記のjsonを逆シリアル化するケースクラスは、次のようになります。
case class Inventory(products:List[Product])
case class Product(productType:String,details:ProductDetails)
abstract class ProductDetails
case class ProductDetailsSimple(productId:String,description:String) extends ProductDetails
case class ProductDetailsComplex(productId:String,description:Map[String,String]) extends ProductDetails
上記の JSON 文字列を次のように逆シリアル化するためにjackson-scala モジュールを使用しています。
val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.readValue(jsonBody, classOf[Inventory])
私が得るエラーは次のとおりです:「予期しないトークン (END_OBJECT)、予想される FIELD_NAME: タイプ ID を含むプロパティ '@details' がありません (クラス ProductDetails の場合)\n at [Source: java.io.StringReader@12dfbabd; line] : 9、列: 5]"
私は、ポリモーフィックなデシリアライゼーションに関するジャクソンのドキュメントを調べ、前述の組み合わせを試しましたが、うまくいきませんでした。ここで何が間違っているのかを理解したいと思います.jacksonモジュールを使用した逆シリアル化に関して修正が必要です.