Skip to content

Commit 277cede

Browse files
committed
Merge pull request #30 from jhorstmann/retriever-type-inference
Improve type inference of Retriever
2 parents 45f3c70 + 13ede05 commit 277cede

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

src/main/java/org/zalando/riptide/Retriever.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public <T> Optional<T> retrieve(final Class<T> type) {
3737
return retrieve(TypeToken.of(type));
3838
}
3939

40-
public <T> Optional<T> retrieve(final TypeToken<?> type) {
40+
public <T> Optional<T> retrieve(final TypeToken<T> type) {
4141
return Optional.ofNullable(captured.getValue())
4242
.filter(v -> this.hasRetrieved(type))
4343
.map(v -> {

src/test/java/org/example/application/RestIntegrationTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,26 @@ public void shouldRetrieveParameterizedType() throws IOException {
137137
assertThat(result.get(0), isA(String.class));
138138
}
139139

140+
@Test
141+
public void shouldRetrieveParameterizedTypeWithTypeInference() throws IOException {
142+
setUp(new PassThroughResponseErrorHandler());
143+
144+
server.expect(requestTo(url)).andRespond(withSuccess()
145+
.contentType(MediaType.APPLICATION_JSON)
146+
.body("[\"a\",\"b\"]"));
147+
148+
final TypeToken<List<String>> typeToken = new TypeToken<List<String>>() {
149+
};
150+
final List<String> result = unit.execute(GET, url).dispatch(status(),
151+
on(OK, typeToken).capture(),
152+
anyStatus().call(this::error))
153+
.retrieve(typeToken).orElseThrow(() -> new RuntimeException("Unable to retrieve List<String>"));
154+
155+
assertThat(result, is(not(nullValue())));
156+
assertThat(result, hasSize(2));
157+
assertThat(result.get(0), isA(String.class));
158+
}
159+
140160
@Test
141161
public void shouldNotRetrieveMappedParameterizedType() throws IOException {
142162
setUp(new PassThroughResponseErrorHandler());

0 commit comments

Comments
 (0)