From 9790d94872e5859b343bac994d682ccc432ebbe9 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 20 May 2014 10:33:42 +0200 Subject: [PATCH] #180 - Overhaul of URI template expansion in Traverson. We're now consistently using Spring HATEOAS' UriTemplate instead of the Spring MVC one to be able to expand extended template parameters correctly. Also the ObjectMapper used by Traverson to unmarshal JSON responses does not fail for unknown properties anymore. --- .../springframework/hateoas/client/Traverson.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/springframework/hateoas/client/Traverson.java b/src/main/java/org/springframework/hateoas/client/Traverson.java index edca599d..9f5e4496 100644 --- a/src/main/java/org/springframework/hateoas/client/Traverson.java +++ b/src/main/java/org/springframework/hateoas/client/Traverson.java @@ -46,6 +46,7 @@ import org.springframework.plugin.core.OrderAwarePluginRegistry; import org.springframework.util.Assert; import org.springframework.web.client.RestTemplate; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.jayway.jsonpath.JsonPath; @@ -103,6 +104,7 @@ public class Traverson { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Jackson2HalModule()); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); @@ -197,7 +199,7 @@ public class Traverson { public T toObject(Class type) { Assert.notNull(type, "Target type must not be null!"); - return template.exchange(traverseToFinalUrl(), GET, prepareRequest(headers), type, templateParameters).getBody(); + return template.exchange(traverseToFinalUrl(), GET, prepareRequest(headers), type).getBody(); } /** @@ -210,7 +212,7 @@ public class Traverson { public T toObject(ParameterizedTypeReference type) { Assert.notNull(type, "Target type must not be null!"); - return template.exchange(traverseToFinalUrl(), GET, prepareRequest(headers), type, templateParameters).getBody(); + return template.exchange(traverseToFinalUrl(), GET, prepareRequest(headers), type).getBody(); } /** @@ -224,7 +226,7 @@ public class Traverson { Assert.hasText(jsonPath, "JSON path must not be null or empty!"); - String forObject = template.getForObject(traverseToFinalUrl(), String.class, templateParameters); + String forObject = template.getForObject(traverseToFinalUrl(), String.class); return JsonPath.read(forObject, jsonPath); } @@ -237,11 +239,14 @@ public class Traverson { public ResponseEntity toEntity(Class type) { Assert.notNull(type, "Target type must not be null!"); - return template.getForEntity(traverseToFinalUrl(), type, templateParameters); + + return template.getForEntity(traverseToFinalUrl(), type); } private String traverseToFinalUrl() { - return getAndFindLinkWithRel(baseUri.toString(), rels.iterator()); + + String uri = getAndFindLinkWithRel(baseUri.toString(), rels.iterator()); + return new UriTemplate(uri).expand(templateParameters).toString(); } private String getAndFindLinkWithRel(String uri, Iterator rels) {