我必须从对象(使用 jackson ObjectMapper)生成奇怪的 json,例如:
{
"data":{
"id":"1",
"name":"Json"
},
"userType":"MD"
}
但是,使用 jackson data-bind 我只能做:
{
"id":"1",
"name":"Json",
"userType":"MD"
}
使用 User.class:
public class User {
private String id;
private String name;
private String userType;
//Getters Setters Constructor
我找到了两种绕过方法。第一个 - 使用另一个“超类”:
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 关系)而不是“超类”,只是为了增加可读性,您可以像这样重构您的类:
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,则无法表示您的模型。因此,显然,第一种方法是您应该考虑的方法!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句