如何使用Jackson读取特定Java类型的单个JSON字段?
我试图从客户端提供的JSON过滤器构建一个JPA CriteriaQuery;也就是说,要查询此人POJO:如何使用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" }
@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()
方法将神奇地返回一个读卡器,该读卡器将以JavaDate
的形式读取JSON字符串(或者更一般地说,ObjectMapper
将使用为该字段注释的[de]序列化器解析的类型)
注意:我不是问如何用Jackson解析日期,而是问如何读取一个值并获取Jackson通常会反序列化的对象,但是对于嵌套字段。请参阅-使用@JsonFormat格式化Date@bodoDate
只是一个示例类型,它可以是任何类型。我会尽量让答案更清楚。这是一个如何将包含日期格式的json字符串转换为日期的示例。这就是您一直在搜索的内容,不是吗?好吧,我明白了,这是一个mixin示例(这是序列化为json的,但并不重要),可能对您的应用更准确problem@bodo不,我不知道我需要反序列化值的类型,它可以是任何类型。我需要告诉ObjectMapper
“反序列化此JsonNode
,就像您将该节点用于MyBean.class
的字段foo
一样;由于ObjectMapper
很清楚,我正在尝试获取这些信息。请参阅-Use@JsonFormat来格式化Date@bodoDate
只是一个示例类型,它可以是任何类型。我会尽量让答案更清楚。这是一个如何将包含日期格式的json字符串转换为日期的示例。这就是您一直在搜索的内容,不是吗?好吧,我明白了,这是一个mixin示例(这是序列化为json的,但并不重要),可能对您的应用更准确problem@bodo不,我不知道我需要反序列化值的类型,它可以是任何类型。我需要告诉ObjectMapper
“将此JsonNode
反序列化,就像您将节点用于MyBean.class
的字段foo
时所做的那样;因为ObjectMapper
很清楚,所以我正在尝试获取此信息。