35
35
import org .springframework .format .support .DefaultFormattingConversionService ;
36
36
import org .springframework .lang .Nullable ;
37
37
import org .springframework .util .Assert ;
38
+ import org .springframework .util .StringValueResolver ;
38
39
import org .springframework .web .service .annotation .HttpExchange ;
39
40
40
41
/**
@@ -50,17 +51,22 @@ public final class HttpServiceProxyFactory {
50
51
51
52
private final List <HttpServiceArgumentResolver > argumentResolvers ;
52
53
54
+ @ Nullable
55
+ private final StringValueResolver embeddedValueResolver ;
56
+
53
57
private final ReactiveAdapterRegistry reactiveAdapterRegistry ;
54
58
55
59
private final Duration blockTimeout ;
56
60
57
61
58
62
private HttpServiceProxyFactory (
59
63
HttpClientAdapter clientAdapter , List <HttpServiceArgumentResolver > argumentResolvers ,
60
- ReactiveAdapterRegistry reactiveAdapterRegistry , Duration blockTimeout ) {
64
+ @ Nullable StringValueResolver embeddedValueResolver , ReactiveAdapterRegistry reactiveAdapterRegistry ,
65
+ Duration blockTimeout ) {
61
66
62
67
this .clientAdapter = clientAdapter ;
63
68
this .argumentResolvers = argumentResolvers ;
69
+ this .embeddedValueResolver = embeddedValueResolver ;
64
70
this .reactiveAdapterRegistry = reactiveAdapterRegistry ;
65
71
this .blockTimeout = blockTimeout ;
66
72
}
@@ -80,8 +86,8 @@ public <S> S createClient(Class<S> serviceType) {
80
86
.stream ()
81
87
.map (method ->
82
88
new HttpServiceMethod (
83
- method , serviceType , this .argumentResolvers ,
84
- this .clientAdapter , this .reactiveAdapterRegistry , this .blockTimeout ))
89
+ method , serviceType , this .argumentResolvers , this . clientAdapter ,
90
+ this .embeddedValueResolver , this .reactiveAdapterRegistry , this .blockTimeout ))
85
91
.toList ();
86
92
87
93
return ProxyFactory .getProxy (serviceType , new HttpServiceMethodInterceptor (methods ));
@@ -114,6 +120,9 @@ public final static class Builder {
114
120
@ Nullable
115
121
private ConversionService conversionService ;
116
122
123
+ @ Nullable
124
+ private StringValueResolver embeddedValueResolver ;
125
+
117
126
private ReactiveAdapterRegistry reactiveAdapterRegistry = ReactiveAdapterRegistry .getSharedInstance ();
118
127
119
128
private Duration blockTimeout = Duration .ofSeconds (5 );
@@ -144,6 +153,18 @@ public Builder setConversionService(ConversionService conversionService) {
144
153
return this ;
145
154
}
146
155
156
+ /**
157
+ * Set the StringValueResolver to use for resolving placeholders and
158
+ * expressions in {@link HttpExchange#url()}.
159
+ * @param embeddedValueResolver the resolver to use
160
+ * @return the same builder instance
161
+ * @see org.springframework.context.EmbeddedValueResolverAware
162
+ */
163
+ public Builder setEmbeddedValueResolver (@ Nullable StringValueResolver embeddedValueResolver ) {
164
+ this .embeddedValueResolver = embeddedValueResolver ;
165
+ return this ;
166
+ }
167
+
147
168
/**
148
169
* Set the {@link ReactiveAdapterRegistry} to use to support different
149
170
* asynchronous types for HTTP service method return values.
@@ -176,7 +197,8 @@ public HttpServiceProxyFactory build() {
176
197
List <HttpServiceArgumentResolver > resolvers = initArgumentResolvers (conversionService );
177
198
178
199
return new HttpServiceProxyFactory (
179
- this .clientAdapter , resolvers , this .reactiveAdapterRegistry , this .blockTimeout );
200
+ this .clientAdapter , resolvers , this .embeddedValueResolver , this .reactiveAdapterRegistry ,
201
+ this .blockTimeout );
180
202
}
181
203
182
204
private ConversionService initConversionService () {
0 commit comments