我有一个 JSON 结构,其中包含字符串到对象的映射:
{
"domains": {
"ldap": {
"users": {
"fwalther": {
"firstName": "Fritz",
"lastName": "Walther"
},
// ...
}
}
},
// ...
}
我想将此结构反序列化为使用 Jackson 的对象,Domain并且User我希望每个用户都有一个对其映射键(即用户 ID)和Domain容器的反向引用。这两种方法都有效,但如果我尝试同时获取两个反向引用,它就会失败。
@JsonManagedReference带有和的 Java 类@JsonBackReference:
public class Domain {
@JsonManagedReference
@JsonDeserialize(contentUsing = UserDeserializer.class)
private Map<String, User> users;
public Map<String, User> getUsers() {
return users;
}
}
public class User {
@JsonBackReference
private Domain domain;
String userId;
private String firstName;
private String lastName;
// ... getters
}
自定义反序列化器获取映射键:
public class UserDeserializer extends JsonDeserializer<User> {
@Override
public User deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
String key = p.getCurrentName();
User result = p.readValueAs(User.class);
result.userId = key;
return result;
}
}
如果我只激活其中一个,这两种机制,即@JsonManagedReference/@JsonBackReference对和自定义反序列化器都可以工作。@JsonDeserialize但是如果我结合这些机制(如上面的代码所示),在解析 JSON 时会出现以下异常:
查看引发异常的代码,我发现我需要findBackReference在我的自定义反序列化器中实现,但我不知道如何,我也找不到这方面的信息。有任何想法吗?
还是有其他方法可以同时获取映射键和对包含对象的反向引用?
郎朗坤
相关分类