我有问题与杰克逊序列化的对象的接口。杰克逊嵌套对象的序列化
我有类
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"}}}
,在嵌套的对象具有属性“名”虽然我在地图中指定了序列化类型的Point(点号)(@JsonSerialize(as = PointView.class)
)。接口PointView不具有方法getName,但在结果中存在字段“名称”的点。
如果我删除类集装箱从法的GetMap注释(@JsonSerialize(as = MapView.class)
)我得到的结果
{"map":{"id":"mapId","name":"mapName","point":{"id":"pointId"}}}
现在点不要有“名称”属性,但地图都有。
我怎样才能导致
{"map":{"id":"mapId","point":{"id":"pointId"}}}
?
我发现这个问题的解决方案进行注释。 Annotation @JsonSerialize也必须在接口'Map getView {String getId(); @JsonSerialize(as = PointView。类)getPoint(); }' –
最好:你写你的解答作为答案,并且打勾是正确的。 (只要有可能) –