4

次の形式の 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モジュールを使用した逆シリアル化に関して修正が必要です.

4

1 に答える 1