Java 将classname作为包装器对象包含在json中

Java 将classname作为包装器对象包含在json中,java,json,gson,Java,Json,Gson,我目前正在用java构建一个JSON,它将在调用POST端点时用作requestbody。我需要构建到JSON中的类如下所示: public class EmployeeImport { @SerializedName("Header") private final Header header; @SerializedName("Employees") private final List<Employee> e

我目前正在用java构建一个JSON,它将在调用POST端点时用作requestbody。我需要构建到JSON中的类如下所示:

public class EmployeeImport {
    @SerializedName("Header")
    private final Header header;
    @SerializedName("Employees")
    private final List<Employee> employees;

    public EmployeeImport(final Header header,
                          final List<Employee> employees) {
        this.header = header;
        this.employees = employees;
    }
{
  "Header": {
    "Date": "2021-01-14"
  },
  "Employees": [
    {
      "ValueOne": "lala",
      "ValueTwo": "lalala"
    }
  ]
}
{
    "EmployeeImport": {
        "Header": {
            "Date": "2021-01-13"
        },

        "Employees": [{
            "ValueOne": "lala",
            "ValueTwo": "lalala"
        }]
    }
}
打印JSON时,如下所示:

public class EmployeeImport {
    @SerializedName("Header")
    private final Header header;
    @SerializedName("Employees")
    private final List<Employee> employees;

    public EmployeeImport(final Header header,
                          final List<Employee> employees) {
        this.header = header;
        this.employees = employees;
    }
{
  "Header": {
    "Date": "2021-01-14"
  },
  "Employees": [
    {
      "ValueOne": "lala",
      "ValueTwo": "lalala"
    }
  ]
}
{
    "EmployeeImport": {
        "Header": {
            "Date": "2021-01-13"
        },

        "Employees": [{
            "ValueOne": "lala",
            "ValueTwo": "lalala"
        }]
    }
}
但我需要JSON包含类“EmployeeImport”作为包装对象,如下所示:

public class EmployeeImport {
    @SerializedName("Header")
    private final Header header;
    @SerializedName("Employees")
    private final List<Employee> employees;

    public EmployeeImport(final Header header,
                          final List<Employee> employees) {
        this.header = header;
        this.employees = employees;
    }
{
  "Header": {
    "Date": "2021-01-14"
  },
  "Employees": [
    {
      "ValueOne": "lala",
      "ValueTwo": "lalala"
    }
  ]
}
{
    "EmployeeImport": {
        "Header": {
            "Date": "2021-01-13"
        },

        "Employees": [{
            "ValueOne": "lala",
            "ValueTwo": "lalala"
        }]
    }
}
我已经找到了一个很好的解决方案,我看到注释“@JsonTypeInfo”似乎可以解决这个问题,但这似乎只适用于jackson库


有人知道如何使用GSON库实现这一点的好方法吗?

您可以创建该包装类,并将其用作您的
EmployeeImport

在下面的示例中,我将现有的
EmployeeImport
类转换为名为
employeeimportiner
的内部类,并将其放置在
EmployeeImport
中:

公共类EmployeeImport{
@SerializedName(“EmployeeImport”)
私人雇员进口公司内部;
公共类EmployeeImportiner{
@SerializedName(“标题”)
私有报头;
@序列化名称(“员工”)
私人名单雇员;
public EmployeeImportiner(最终标题,
最终员工名单){
this.header=头;
这是。雇员=雇员;
}
//未显示getter/setter
}
//未显示getter/setter
}
你不必这样做-如果你愿意,你可以有两个独立的类

在我的例子中,我构建外部对象如下:

public class EmployeeImport {
    @SerializedName("Header")
    private final Header header;
    @SerializedName("Employees")
    private final List<Employee> employees;

    public EmployeeImport(final Header header,
                          final List<Employee> employees) {
        this.header = header;
        this.employees = employees;
    }
{
  "Header": {
    "Date": "2021-01-14"
  },
  "Employees": [
    {
      "ValueOne": "lala",
      "ValueTwo": "lalala"
    }
  ]
}
{
    "EmployeeImport": {
        "Header": {
            "Date": "2021-01-13"
        },

        "Employees": [{
            "ValueOne": "lala",
            "ValueTwo": "lalala"
        }]
    }
}
EmployeeImport EmployeeImport=new EmployeeImport();
最终EmployeeImport.EmployeeImportInner EmployeeImportInner=
employeeImport.new EmployeeImportInner(标题,员工);
employeeImport.setInner(employeeImportInner);

现在,您将在JSON中看到所需的外部对象名。

这是一个很好的解决方案,它的工作方式与我所希望的一样。谢谢@andrewjames!