184.5.2. 什么是多态对象映射?
在某些情况下,序列化对象的接收器无法预先知道对象类型。例如,这适用于一个多形对象数组。考虑抽象类型、Shape
及其子类型、三角
、Square
(等等):
package com.example; ... public abstract class Shape { } public class Triangle extends Shape { ... } public class Square extends Shape { ... } public class ListOfShape { public List<Shape> shapes; ... }
您可以实例化并序列化一个格式数组列表(ListOfShape
),如下所示:
ObjectMapper objectMapper = new ObjectMapper(); ListOfShape shapeList = new ListOfShape(); shapeList.shapes = new ArrayList<Shape>(); shapeList.shapes.add(new Triangle()); shapeList.shapes.add(new Square()); String serialized = objectMapper.writeValueAsString(shapeList);
但是,接收器中现在存在一个问题。您可以通过将 type 指定为 readValue ()
的第二个参数来告知接收器预期 ListOfShape
对象:
MyClass myobject = objectMapper.readValue(serialized, ListOfShape.class); ObjectMapper objectMapper = new ObjectMapper();
但是,没有接收器可以知道列表的第一个元素是 三角
,第二个元素是 Square
。要解决此问题,您需要启用多 形对象映射,如下一节中所述。