如何将几个参数移动到杰克逊的另一个节点?
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,则无法表示您的模型。所以,显然,第一种方法是您应该考虑的方法!
我必须从对象(使用 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,则无法表示您的模型。所以,显然,第一种方法是您应该考虑的方法!