17
17
package org .springframework .web .client .support ;
18
18
19
19
import java .net .URI ;
20
+ import java .util .ArrayList ;
20
21
import java .util .List ;
21
- import java .util .stream . Collectors ;
22
+ import java .util .Map ;
22
23
23
24
import org .springframework .core .ParameterizedTypeReference ;
24
25
import org .springframework .http .HttpCookie ;
27
28
import org .springframework .http .RequestEntity ;
28
29
import org .springframework .http .ResponseEntity ;
29
30
import org .springframework .util .Assert ;
30
- import org .springframework .util .LinkedMultiValueMap ;
31
- import org .springframework .util .MultiValueMap ;
32
31
import org .springframework .web .client .RestTemplate ;
33
32
import org .springframework .web .service .invoker .HttpExchangeAdapter ;
34
33
import org .springframework .web .service .invoker .HttpRequestValues ;
35
34
import org .springframework .web .service .invoker .HttpServiceProxyFactory ;
36
35
37
36
/**
38
- * An {@link HttpExchangeAdapter} that enables an {@link HttpServiceProxyFactory} to use
37
+ * {@link HttpExchangeAdapter} that enables an {@link HttpServiceProxyFactory} to use
39
38
* {@link RestTemplate} for request execution.
40
- * <p>
41
- * Use static factory methods in this class to create an {@link HttpServiceProxyFactory}
42
- * configured with a given {@link RestTemplate}.
39
+ *
40
+ * <p> Use static factory methods in this class to create an
41
+ * {@link HttpServiceProxyFactory} configured with a given {@link RestTemplate}.
43
42
*
44
43
* @author Olga Maciaszek-Sharma
45
44
* @since 6.1
@@ -48,11 +47,17 @@ public final class RestTemplateAdapter implements HttpExchangeAdapter {
48
47
49
48
private final RestTemplate restTemplate ;
50
49
51
- // Private constructor; use static factory methods to instantiate
50
+
52
51
private RestTemplateAdapter (RestTemplate restTemplate ) {
53
52
this .restTemplate = restTemplate ;
54
53
}
55
54
55
+
56
+ @ Override
57
+ public boolean supportsRequestAttributes () {
58
+ return false ;
59
+ }
60
+
56
61
@ Override
57
62
public void exchange (HttpRequestValues requestValues ) {
58
63
this .restTemplate .exchange (newRequest (requestValues ), Void .class );
@@ -74,14 +79,10 @@ public ResponseEntity<Void> exchangeForBodilessEntity(HttpRequestValues requestV
74
79
}
75
80
76
81
@ Override
77
- public <T > ResponseEntity <T > exchangeForEntity (HttpRequestValues requestValues ,
78
- ParameterizedTypeReference <T > bodyType ) {
79
- return this .restTemplate .exchange (newRequest (requestValues ), bodyType );
80
- }
82
+ public <T > ResponseEntity <T > exchangeForEntity (
83
+ HttpRequestValues requestValues , ParameterizedTypeReference <T > bodyType ) {
81
84
82
- @ Override
83
- public boolean supportsRequestAttributes () {
84
- return false ;
85
+ return this .restTemplate .exchange (newRequest (requestValues ), bodyType );
85
86
}
86
87
87
88
private RequestEntity <?> newRequest (HttpRequestValues requestValues ) {
@@ -90,8 +91,9 @@ private RequestEntity<?> newRequest(HttpRequestValues requestValues) {
90
91
uri = requestValues .getUri ();
91
92
}
92
93
else if (requestValues .getUriTemplate () != null ) {
93
- uri = this .restTemplate .getUriTemplateHandler ().expand (requestValues .getUriTemplate (),
94
- requestValues .getUriVariables ());
94
+ String uriTemplate = requestValues .getUriTemplate ();
95
+ Map <String , String > variables = requestValues .getUriVariables ();
96
+ uri = this .restTemplate .getUriTemplateHandler ().expand (uriTemplate , variables );
95
97
}
96
98
else {
97
99
throw new IllegalStateException ("Neither full URL nor URI template" );
@@ -100,35 +102,30 @@ else if (requestValues.getUriTemplate() != null) {
100
102
HttpMethod httpMethod = requestValues .getHttpMethod ();
101
103
Assert .notNull (httpMethod , "HttpMethod is required" );
102
104
103
- RequestEntity .BodyBuilder builder = RequestEntity .method (httpMethod , uri )
104
- .headers (requestValues .getHeaders ());
105
+ RequestEntity .BodyBuilder builder = RequestEntity .method (httpMethod , uri );
106
+ builder .headers (requestValues .getHeaders ());
105
107
106
108
if (!requestValues .getCookies ().isEmpty ()) {
107
- MultiValueMap <String , HttpCookie > cookies = new LinkedMultiValueMap <>();
108
- requestValues .getCookies ()
109
- .forEach ((name , values ) -> values .forEach (value ->
110
- cookies .add (name , new HttpCookie (name , value ))));
111
-
112
- builder .header (HttpHeaders .COOKIE ,
113
- cookies .values ()
114
- .stream ()
115
- .flatMap (List ::stream )
116
- .map (HttpCookie ::toString )
117
- .collect (Collectors .joining ("; " )));
109
+ List <String > cookies = new ArrayList <>();
110
+ requestValues .getCookies ().forEach ((name , values ) -> values .forEach (value -> {
111
+ HttpCookie cookie = new HttpCookie (name , value );
112
+ cookies .add (cookie .toString ());
113
+ }));
114
+ builder .header (HttpHeaders .COOKIE , String .join ("; " , cookies ));
118
115
}
119
116
120
117
if (requestValues .getBodyValue () != null ) {
121
118
return builder .body (requestValues .getBodyValue ());
122
119
}
120
+
123
121
return builder .build ();
124
122
}
125
123
124
+
126
125
/**
127
- * Create a {@link RestTemplateAdapter} for the given {@link RestTemplate} instance.
128
- * @param restTemplate the {@link RestTemplate} to use
129
- * @return the created adapter instance
126
+ * Create a {@link RestTemplateAdapter} with the given {@link RestTemplate}.
130
127
*/
131
- public static RestTemplateAdapter forTemplate (RestTemplate restTemplate ) {
128
+ public static RestTemplateAdapter create (RestTemplate restTemplate ) {
132
129
return new RestTemplateAdapter (restTemplate );
133
130
}
134
131
0 commit comments