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"); + } }