我的接口有jackson序列化对象的问题.
我有课
class Point implements PointView {
private String id;
private String name;
public Point() {
}
public Point(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String getId() {
return id;
}
public String getName() {
return name;
}
}
实现
interface PointView {
String getId();
}
并上课
class Map implements MapView {
private String id;
private String name;
private Point point;
public Map() {
}
public Map(String id, String name, Point point) {
this.id = id;
this.name = name;
this.point = point;
}
@Override
public String getId() {
return id;
}
public String getName() {
return name;
}
@JsonSerialize(as = PointView.class)
public Point getPoint() {
return point;
}
}
实现
interface MapView {
String getId();
Point getPoint();
}
并上课
class Container {
private Map map;
public Container() {
}
public Container(Map map) {
this.map = map;
}
@JsonSerialize(as = MapView.class)
public Map getMap() {
return map;
}
}
我想要与杰克逊序列化容器并获得结果
{"map":{"id":"mapId","point":{"id":"pointId"}}}
但实际上我得到了结果
{"map":{"id":"mapId","point":{"id":"pointId","name":"pointName"}}}
尽管我在Map中指定了Point的序列化类型(@JsonSerialize(as = PointView.class)),但在嵌套对象“point”中具有属性“name”.接口PointView没有方法getName,但结果存在Point的字段“name”.
如果我从类Container中的方法getMap中删除注释(@JsonSerialize(as = MapView.class))我得到结果
{"map":{"id":"mapId","name":"mapName","point":{"id":"pointId"}}}
现在点没有属性“名称”,但地图有.
我怎样才能得到结果
{"map":{"id":"mapId","point":{"id":"pointId"}}}
?