59
59
* @author Oliver Gierke
60
60
* @author Dietrich Schulten
61
61
* @author Greg Turnquist
62
+ * @author Tom Bunting
62
63
* @since 0.11
63
64
*/
64
65
public class Traverson {
@@ -305,7 +306,7 @@ public TraversalBuilder withHeaders(HttpHeaders headers) {
305
306
public <T > T toObject (Class <T > type ) {
306
307
307
308
Assert .notNull (type , "Target type must not be null!" );
308
- return operations .exchange (traverseToFinalUrl ( true ), GET , prepareRequest (headers ), type ).getBody ();
309
+ return operations .exchange (traverseToExpandedFinalUrl ( ), GET , prepareRequest (headers ), type ).getBody ();
309
310
}
310
311
311
312
/**
@@ -318,7 +319,7 @@ public <T> T toObject(Class<T> type) {
318
319
public <T > T toObject (ParameterizedTypeReference <T > type ) {
319
320
320
321
Assert .notNull (type , "Target type must not be null!" );
321
- return operations .exchange (traverseToFinalUrl ( true ), GET , prepareRequest (headers ), type ).getBody ();
322
+ return operations .exchange (traverseToExpandedFinalUrl ( ), GET , prepareRequest (headers ), type ).getBody ();
322
323
}
323
324
324
325
/**
@@ -332,7 +333,7 @@ public <T> T toObject(String jsonPath) {
332
333
333
334
Assert .hasText (jsonPath , "JSON path must not be null or empty!" );
334
335
335
- String forObject = operations .exchange (traverseToFinalUrl ( true ), GET , prepareRequest (headers ), String .class )
336
+ String forObject = operations .exchange (traverseToExpandedFinalUrl ( ), GET , prepareRequest (headers ), String .class )
336
337
.getBody ();
337
338
return JsonPath .read (forObject , jsonPath );
338
339
}
@@ -346,7 +347,7 @@ public <T> T toObject(String jsonPath) {
346
347
public <T > ResponseEntity <T > toEntity (Class <T > type ) {
347
348
348
349
Assert .notNull (type , "Target type must not be null!" );
349
- return operations .exchange (traverseToFinalUrl ( true ), GET , prepareRequest (headers ), type );
350
+ return operations .exchange (traverseToExpandedFinalUrl ( ), GET , prepareRequest (headers ), type );
350
351
}
351
352
352
353
/**
@@ -374,14 +375,20 @@ public Link asTemplatedLink() {
374
375
private Link traverseToLink (boolean expandFinalUrl ) {
375
376
376
377
Assert .isTrue (rels .size () > 0 , "At least one rel needs to be provided!" );
377
- return new Link (traverseToFinalUrl (expandFinalUrl ), rels .get (rels .size () - 1 ).getRel ());
378
+ return new Link (expandFinalUrl ? traverseToExpandedFinalUrl ().toString () : traverseToFinalUrl (),
379
+ rels .get (rels .size () - 1 ).getRel ());
378
380
}
379
381
380
- private String traverseToFinalUrl (boolean expandFinalUrl ) {
382
+ private String traverseToFinalUrl () {
381
383
382
384
String uri = getAndFindLinkWithRel (baseUri .toString (), rels .iterator ());
383
- UriTemplate uriTemplate = new UriTemplate (uri );
384
- return expandFinalUrl ? uriTemplate .expand (templateParameters ).toString () : uriTemplate .toString ();
385
+ return new UriTemplate (uri ).toString ();
386
+ }
387
+
388
+ private URI traverseToExpandedFinalUrl () {
389
+
390
+ String uri = getAndFindLinkWithRel (baseUri .toString (), rels .iterator ());
391
+ return new UriTemplate (uri ).expand (templateParameters );
385
392
}
386
393
387
394
private String getAndFindLinkWithRel (String uri , Iterator <Hop > rels ) {
0 commit comments