如何将几个参数移动到杰克逊的另一个节点?

How to move several params to another node in jackson?

我必须从对象(使用 jackson ObjectMapper)生成奇怪的 json,例如:

{
   "data":{
      "id":"1",
      "name":"Json"
   },
   "userType":"MD"
}

但是,使用 jackson 数据绑定我只能做:

{
   "id":"1",
   "name":"Json",
   "userType":"MD"
}

与User.class:

public class User {
    private String id;
    private String name;
    private String userType;

//Getters Setters Constructor

我找到了两种绕过的方法。第一个 - 使用另一个 "superclass":

public class Data {
    @JsonProperty("data")
    private User user;
    private String userType;
//Getters Setters Constructor

第二种方式 - 使用地图:

Map<String, Object> map = new HashMap<>();
        map.put("data", user);
        map.put("userType", "MD");
        String json = objMapper.writeValueAsString(map);

但我认为,如果我有大约 8 个具有这种结构的不同对象,那么使用这种方式是不可取的。那么,什么是最佳实践?或者也许还有另一种内置方式? 我想找到最好的

您提到的第一种方法是最佳实践,但它被称为组合(HAS-A 关系)而不是 'superclass' 并且只是为了增加可读性,您可以像这样重构您的 类:

public class User {
    private Data data;
    private String userType;

//Getters Setters Constructor
}


public class Data {

    private String id;
    private String name;
    // getters and setters
}

因此,当您将 pojo 编组到 json 时,结构将是:

{
   "data":{
      "id":"1",
      "name":"Json"
   },
   "userType":"MD"
}

这就是你想要的!编码愉快:)

更新:如果您使用 Swagger 或 Open API Spec 生成 API 文档,那么如果您使用 Map 或 HashMap,则无法表示您的模型。所以,显然,第一种方法是您应该考虑的方法!