如何使用Jackson读取特定Java类型的单个JSON字段?

如何使用Jackson读取特定Java类型的单个JSON字段?,java,json,jackson,Java,Json,Jackson,我试图从客户端提供的JSON过滤器构建一个JPA CriteriaQuery;也就是说,要查询此人POJO: @Entity public class Person { @Id public Long id; public String name; public Date dateOfBirth; } 客户机将提供如下JSON { "$or": [ { "name": { "$beginsWith": "Jo" }

我试图从客户端提供的JSON过滤器构建一个JPA CriteriaQuery;也就是说,要查询此人POJO:

@Entity
public class Person {

    @Id
    public Long id;

    public String name;

    public Date dateOfBirth;

}
客户机将提供如下JSON

{
    "$or": [
        { "name":        { "$beginsWith": "Jo" } },
        { "dateOfBirth": { "$lessThan":   "1983-01-01T00:00:00Z" } }
    ]       
}
在解析这个过滤器时,我需要从提供的JSON值中获取正确的Java类型,例如
dateOfBirth
Date
。考虑到我可以很容易地访问
“1983-01-01T00:00:00Z”
JsonNode
,而且Jackson的
对象映射器
知道在某个地方对
Person.class
出生日期
字段反序列化什么类型,我如何获得它?理想情况下,它应符合以下几点:

// jsonNode is the JsonNode for "1983-01-01T00:00:00Z"

ObjectMapper mapper = new ObjectMapper();
ObjectReader reader = mapper.readerFor(Person.class);
Date date = (Date) reader.asField("dateOfBirth").readValue(jsonNode);
asField()
方法将神奇地返回一个读卡器,该读卡器将以Java
Date
的形式读取JSON
字符串(或者更一般地说,
ObjectMapper
将使用为该字段注释的[de]序列化器解析的类型)


注意:我不是问如何用Jackson解析日期,而是问如何读取一个值并获取Jackson通常会反序列化的对象,但是对于嵌套字段。

请参阅-使用@JsonFormat格式化Date@bodo
Date
只是一个示例类型,它可以是任何类型。我会尽量让答案更清楚。这是一个如何将包含日期格式的json字符串转换为日期的示例。这就是您一直在搜索的内容,不是吗?好吧,我明白了,这是一个mixin示例(这是序列化为json的,但并不重要),可能对您的应用更准确problem@bodo不,我不知道我需要反序列化值的类型,它可以是任何类型。我需要告诉
ObjectMapper
“反序列化此
JsonNode
,就像您将该节点用于
MyBean.class
的字段
foo
一样;由于
ObjectMapper
很清楚,我正在尝试获取这些信息。请参阅-Use@JsonFormat来格式化Date@bodo
Date
只是一个示例类型,它可以是任何类型。我会尽量让答案更清楚。这是一个如何将包含日期格式的json字符串转换为日期的示例。这就是您一直在搜索的内容,不是吗?好吧,我明白了,这是一个mixin示例(这是序列化为json的,但并不重要),可能对您的应用更准确problem@bodo不,我不知道我需要反序列化值的类型,它可以是任何类型。我需要告诉
ObjectMapper
“将此
JsonNode
反序列化,就像您将节点用于
MyBean.class
的字段
foo
时所做的那样;因为
ObjectMapper
很清楚,所以我正在尝试获取此信息。