Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取详细的json响应(无id引用,始终为实例)_Java_Json_Serialization_Jackson_Deserialization - Fatal编程技术网

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);