From ab8a4007581d5cb5fbcb3617c90ce958fe007ff8 Mon Sep 17 00:00:00 2001 From: Daniel Rucci Date: Fri, 6 Sep 2024 09:56:42 -0400 Subject: [PATCH] Add method for using filter predicates w/ typeRef The read methods that take a `Predicate...` were missing a typeRef variant. --- .../main/java/com/jayway/jsonpath/ReadContext.java | 11 +++++++++++ .../com/jayway/jsonpath/internal/JsonContext.java | 5 +++++ .../java/com/jayway/jsonpath/PredicateTest.java | 14 ++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/json-path/src/main/java/com/jayway/jsonpath/ReadContext.java b/json-path/src/main/java/com/jayway/jsonpath/ReadContext.java index 45bbd8c8..2fe0d842 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/ReadContext.java +++ b/json-path/src/main/java/com/jayway/jsonpath/ReadContext.java @@ -58,6 +58,17 @@ public interface ReadContext { */ T read(String path, Class type, Predicate... filters); + /** + * Reads the given path from this context + * + * @param path path to read + * @param typeRef expected return type (will try to map) + * @param filters filters + * @param + * @return result + */ + T read(String path, TypeRef typeRef, Predicate... filters); + /** * Reads the given path from this context * diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java b/json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java index 76985f78..eda4772b 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java @@ -82,6 +82,11 @@ public class JsonContext implements DocumentContext { return convert(read(path, filters), type, configuration); } + @Override + public T read(String path, TypeRef type, Predicate... filters) { + return convert(read(path, filters), type, configuration); + } + @Override public T read(JsonPath path) { notNull(path, "path can not be null"); diff --git a/json-path/src/test/java/com/jayway/jsonpath/PredicateTest.java b/json-path/src/test/java/com/jayway/jsonpath/PredicateTest.java index 524c9a3b..b888a005 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/PredicateTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/PredicateTest.java @@ -23,4 +23,18 @@ public class PredicateTest extends BaseTest { assertThat(reader.read("$.store.book[?].isbn", List.class, booksWithISBN)).containsOnly("0-395-19395-8", "0-553-21311-3"); } + + @Test + public void predicates_filters_can_be_applied_with_type_ref() { + TypeRef> typeRef = new TypeRef>() { + }; + Predicate booksWithISBN = new Predicate() { + @Override + public boolean apply(PredicateContext ctx) { + return ctx.item(Map.class).containsKey("isbn"); + } + }; + + assertThat(reader.read("$.store.book[?].isbn", typeRef, booksWithISBN)).containsOnly("0-395-19395-8", "0-553-21311-3"); + } }