Java 将classname作为包装器对象包含在json中
我目前正在用java构建一个JSON,它将在调用POST端点时用作requestbody。我需要构建到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
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!