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

时间:2016-01-22 09:07:40

标签: 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" } },
        { "dateOfBirth": { "$lessThan":   "1983-01-01T00:00:00Z" } }
    ]       
}

解析此过滤器时,我需要从提供的JSON值中获取正确的Java类型,例如: Date dateOfBirth。鉴于我可以轻松达到JsonNode "1983-01-01T00:00:00Z"并且杰克逊ObjectMapper知道哪些类型要针对dateOfBirth 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()方法可以回归读取JSON string作为Java Date的读者(或更常见的是ObjectMapper将解析的类型应用为该字段注释的[de]序列化程序)。

注意:我不会问如何解析杰克逊的日期,但是如何读取值并获取杰克逊正常反序列化的对象,但是对于嵌套字段。

0 个答案:

没有答案