Java 获取详细的json响应(无id引用,始终为实例)
我有以下目标:Java 获取详细的json响应(无id引用,始终为实例),java,json,serialization,jackson,deserialization,Java,Json,Serialization,Jackson,Deserialization,我有以下目标: public class A { private String id; private String name; private List <B> bs; } @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") public class B { private String id; private
public class A
{
private String id;
private String name;
private List <B> bs;
}
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class B
{
private String id;
private String name;
}
是否有机会始终获得完整的实例而不是引用?。例如
{
"A": [
{
"id": "1",
"bs": [{
"id": "1",
"name": "b1"
},
{
"id": "2",
"name": "b2"
}]
},
{
"id": "2",
"bs": [{
"id": "1",
"name": "b1"
},
{
"id": "2",
"name": "b2"
}]
}]
}
由于您在注释中指出您依赖
@JsonIdentityInfo
注释进行反序列化,因此删除注释不是一个选项
但是,您可以做的是创建一个混合,专门覆盖此特定用例的对象标识行为:
@JsonIdentityInfo(generator = ObjectIdGenerators.None.class)
public abstract class BMixIn {}
然后将其注册到用于写入输出的ObjectMapper
:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixIn(B.class, BMixIn.class);
从类中删除
@JsonIdentityInfo
注释不是一个选项吗?不,因为在此之前,我也使用引用序列化json文件中的所有内容。如果没有这一点,我从Jackson那里得到了一个例外,我认为你最好的选择是在这个特定的情况下使用一个mix-in,在这个情况下,你覆盖@JsonIdentityInfo
注释来使用ObjectiveGenerators.None
。你可能想用java
标记替换你问题上的一个标记。您将获得更多的视图/答案。我得到以下错误:无法构造B
的实例(尽管至少存在一个创建者):没有字符串参数构造函数/工厂方法从字符串值('2')反序列化您不应该使用混入的ObjectMapper来反序列化,只是为了序列化,我想我解释了一些错误,我将json文件反序列化为java对象,然后就是restcontroller发送的对象。我应该更新这个问题吗?那么您想反序列化具有ID引用的JSON,然后用完整的实例信息再次序列化它?是的。这是我的问题。
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixIn(B.class, BMixIn.class);