如何在JSON反序列化过程中将引用转换为实例



这是一个问题,但它已经解决了。我试图将一些JSON数据反序列化为Java POJO。例如,以以下JSON数据为例:

对于Account数据,我有以下JSON数据,该数据通过用户的id引用用户:

{
"name" : "Bob's Account",
"roles": {
"administrator" : "user-1",
"owner"         : "user-1",
"participant"   : "user-2" 
}
}

对于User的"Bob"one_answers"Alice",我得到了以下JSON数据:

{
"name": "Bob",
"id"  : "user-1"
}
{
"name": "Alice",
"id"  : "user-2"
}

我想要实现的是将数据反序列化为以下Java类:

import java.util.Map;
import java.util.HashMap;
public class Account {
String name;
Map<String, User> roles = new HashMap<>();
}

public class User {
String id;
String name;
}

注意,Account类有一个映射,它将String链接到User实例。

要执行此操作,您必须在Account对象中注释属性roles,如下所示:

⋯snip⋯
@JsonDeserialize(contentConverter = UserReferenceConverter.class)
Map<String, User> roles = new HashMap<>();
⋯snip⋯

然后创建一个UserReferenceConverter,它可以将String形式的用户id转换为实际的User实例enter code here:

public class UserReferenceConverter extends StdConverter<String, User> {

@Override
public User convert( String value ) {
// Get the user...
return UserRepository.getUserById( value );
}
}

要从JSON字符串加载Account,请运行以下命令:

import com.fasterxml.jackson.databind.ObjectMapper;
⋯snip⋯
ObjectMapper mapper = new ObjectMapper();
Account account = mapper.readValue(json, Account.class);
⋯snip⋯

最新更新