gpt4 book ai didi

java - 嵌套对象的 jackson 序列化

转载 作者:搜寻专家 更新时间:2023-10-31 20:18:19 25 4
gpt4 key购买 nike

我在通过其接口(interface)对对象进行 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;
}
}

我想用 Jackson 序列化 Container 并得到结果

{"map":{"id":"mapId","point":{"id":"pointId"}}}

但实际上我得到了结果

{"map":{"id":"mapId","point":{"id":"pointId","name":"pointName"}}}

在嵌套对象“point”中具有属性“name”,尽管我在 Map (@JsonSerialize(as = PointView.class)) 中指定了 Point 的序列化类型。接口(interface) PointView 没有方法 getName,但结果存在点的字段“名称”。

如果我从容器类中的方法 getMap 中删除注释 (@JsonSerialize(as = MapView.class)),我会得到结果

{"map":{"id":"mapId","name":"mapName","point":{"id":"pointId"}}}

现在点没有属性“名称”,但是 map 有。

我怎样才能得到结果

{"map":{"id":"mapId","point":{"id":"pointId"}}}

?

最佳答案

要获得所需的结果,接口(interface)中的相同方法也必须由 @JsonSerialize 注释

interface MapView {
String getId();
@JsonSerialize(as = PointView.class)
Point getPoint();
}

关于java - 嵌套对象的 jackson 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33151974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com