java/jackson-解析期间解析

java/jackson-解析期间解析,java,json,jackson,Java,Json,Jackson,我有一个小组,其中包含一份人员名单: class Person { ... } class Group { public Person findPerson(String name) { ... } } 假设我有一个输入JSON(表示SomeDataClass-见下文),它通过名字来表示一个人: { ... "person" : "Bill" } 我正在使用Jackson解析这个输入JSON。默认情况下,Jackson将person字

我有一个小组,其中包含一份人员名单:

class Person {
    ...
}

class Group {
    public Person findPerson(String name) {
        ...
    }
}
假设我有一个输入JSON(表示
SomeDataClass
-见下文),它通过名字来表示一个人:

{
    ...
    "person" : "Bill"
}
我正在使用Jackson解析这个输入JSON。默认情况下,Jackson将
person
字段解析为
字符串。是否可以更改此选项,以便在解析过程中解析/查找此人

class SomeDataClass {
    ...

    @JsonProperty("person")
    protected Person person;
}
请注意,我不想创建一个新人。我想通过调用
Group
实例上的函数
getPerson
来查找它。这意味着我必须在解析过程中访问该组。运行时有几个组,所以它不是单例的

更新


我知道
@JsonDeserialize(使用=XYZ.cass)
的可能性,但这不允许我将组传递给自定义反序列化程序。如前所述,有多个团体,所以这不是单身。我认为这在杰克逊身上是不可能的。您可以尝试将对该组的引用存储在
ThreadLocal
中,以便反序列化程序使用正确的组。

Jackson通过
@JsonIdentityInfo
注释支持对象ID。但假设使用id的引用(在本例中为“Bill”)可以通过在JSON内容中匹配定义来解析,因此这可能不适用于您的情况

你可能需要自己解决问题;若您定义了
setPerson(String)
,则方法本身可以尝试定位要使用的实际实例。但如前所述,这确实需要使用
ThreadLocal
。 另一种选择是自定义反序列化程序,它将通过反序列化上下文使用“属性”;但是您仍然需要提供这样的映射,所以它没有多大帮助