我有一个POJO。
@Data
@AllArgsConstructor
@Builder
public class Emp {
private String position;
private String name;
}
假设我们创建了一个对象
Emp emp = new Emp("Manager", "Bob");
我如何将其转换为列表并将其保存在JSON格式的数据库中?
数据应按以下格式存储在数据库中:
{
list:[
{
position: Manager
name: Bob
}
]
}
有没有现成的解决方案?
我将一个对象转换为一个列表,然后对它调用。tostring()方法:
Collections.singletonList(emp);
但是当我将它存储在数据库中时,下一次保存将进入数据库:
[Emp(position=Manager, name=Bob)]
但是我需要以不同的方式存储记录
我如何将其转换为列表并将其保存在JSON数据库中格式吗?
数据应按以下格式存储在数据库中:
{ "list": [ { "position": "Manager" "name": "Bob" } ] }
因为序列化的JSON需要有一个属性"list"
,所以你不能简单地序列化List。
相反,你可以定义一个POJO来包装这个列表。
这就是它可能看起来的样子(我把它改成通用的,以便使它适合序列化任何类型的列表):
@Data
@AllArgsConstructor
public static class ListWrapper<T> {
private List<T> list;
}
这就是如何使用Jackson的ObjectMapper
和ObjectWriter
来序列化它:
List<Emp> emps = List.of(new Emp("Manager", "Bob"));
ListWrapper<Emp> listWrapper = new ListWrapper<>(emps);
ObjectMapper mapper = new ObjectMapper();
ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
String json = writer.writeValueAsString(listWrapper);
System.out.println(json);
输出:
{
"list" : [ {
"name" : "Manager",
"position" : "Bob"
} ]
}
如果您需要将对象列表作为JSON存储在DB中,那么您需要使用JacksonObjectMapper
将对象列表转换为JSON字符串。将转换后的字符串存储到DB。