将 Map 序列化为父对象的属性

Serialize Map as properties of parent object

我有一个 class Parent,它有一些属性,包括一个 Map

public class Parent {

  private final int propA;
  private final String propB;
  private final Map<String, Object> map;

  publicParent(int propA, String propB, Map<String, Object> map) {
    this.propA = propA;
    this.propB = propB;
    this.map = map;
  }

  public int getPropA() {
    return propA;
  }

  public String getPropB() {
    return propB;
  }

  public Map<String, Object> getMap() {
    return map;
  }

}

在序列化时,我会得到这个:

{
  "propA": 5,
  "propB": "foo",
  "map": {
    "bar": "bong",
    "bing": "bang"
  }
}

如何注释 class 以便 Jackson 序列化它的一个实例,而不是将映射条目作为裸属性放置到父对象?

{
  "propA": 5,
  "propB": "foo",
  "bar": "bong",
  "bing": "bang"
}

我使用了 @JsonAnyGetter 注释来实现这一点。还有一个匹配的 @JsonAnySetter 注释做相反的事情:在地图中填充无法识别的属性。

  @JsonAnyGetter
  public Map<String, Object> getMap() {
    return map;
  }

这里有一个有用的指南:https://www.baeldung.com/jackson-annotations