Skip to content

Commit 495507e

Browse files
committed
AbstractNamedValueArgumentResolver supports Object values
See gh-28458
1 parent 2f94713 commit 495507e

File tree

6 files changed

+22
-19
lines changed

6 files changed

+22
-19
lines changed

spring-web/src/main/java/org/springframework/web/service/invoker/AbstractNamedValueArgumentResolver.java

+12-9
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,15 @@ public abstract class AbstractNamedValueArgumentResolver implements HttpServiceA
4343

4444
protected final Log logger = LogFactory.getLog(getClass());
4545

46+
47+
@Nullable
4648
private final ConversionService conversionService;
4749

4850
private final Map<MethodParameter, NamedValueInfo> namedValueInfoCache = new ConcurrentHashMap<>(256);
4951

5052

5153
/**
52-
* Create an instance.
54+
* Constructor for a resolver to a String value.
5355
* @param conversionService the {@link ConversionService} to use to format
5456
* Object to String values
5557
*/
@@ -58,12 +60,11 @@ protected AbstractNamedValueArgumentResolver(ConversionService conversionService
5860
this.conversionService = conversionService;
5961
}
6062

61-
6263
/**
63-
* Return the configured {@link ConversionService}.
64+
* Constructor for a resolver to an Object value, without conversion.
6465
*/
65-
public ConversionService getConversionService() {
66-
return this.conversionService;
66+
protected AbstractNamedValueArgumentResolver() {
67+
this.conversionService = null;
6768
}
6869

6970

@@ -166,8 +167,8 @@ private void addSingleValue(
166167
value = defaultValue;
167168
}
168169

169-
if (!(value instanceof String)) {
170-
value = getConversionService().convert(value, String.class);
170+
if (this.conversionService != null && !(value instanceof String)) {
171+
value = this.conversionService.convert(value, String.class);
171172
}
172173

173174
if (value == null) {
@@ -179,17 +180,19 @@ private void addSingleValue(
179180
logger.trace("Resolved " + valueLabel + " value '" + name + ":" + value + "'");
180181
}
181182

182-
addRequestValue(name, (String) value, requestValues);
183+
addRequestValue(name, value, requestValues);
183184
}
184185

185186
/**
186187
* Add the given, single request value. This may be called multiples times
187188
* if the request value is multivalued.
189+
* <p>If the resolver was created with a {@link ConversionService}, the value
190+
* will have been converted to a String and may be cast down.
188191
* @param name the request value name
189192
* @param value the value
190193
* @param requestValues builder to add the request value to
191194
*/
192-
protected abstract void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues);
195+
protected abstract void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues);
193196

194197

195198
/**

spring-web/src/main/java/org/springframework/web/service/invoker/CookieValueArgumentResolver.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) {
6363
}
6464

6565
@Override
66-
protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) {
67-
requestValues.addCookie(name, value);
66+
protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) {
67+
requestValues.addCookie(name, (String) value);
6868
}
6969

7070
}

spring-web/src/main/java/org/springframework/web/service/invoker/PathVariableArgumentResolver.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) {
5555
}
5656

5757
@Override
58-
protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) {
59-
requestValues.setUriVariable(name, value);
58+
protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) {
59+
requestValues.setUriVariable(name, (String) value);
6060
}
6161

6262
}

spring-web/src/main/java/org/springframework/web/service/invoker/RequestHeaderArgumentResolver.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) {
6464
}
6565

6666
@Override
67-
protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) {
68-
requestValues.addHeader(name, value);
67+
protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) {
68+
requestValues.addHeader(name, (String) value);
6969
}
7070

7171
}

spring-web/src/main/java/org/springframework/web/service/invoker/RequestParamArgumentResolver.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) {
6767
}
6868

6969
@Override
70-
protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) {
71-
requestValues.addRequestParameter(name, value);
70+
protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) {
71+
requestValues.addRequestParameter(name, (String) value);
7272
}
7373

7474
}

spring-web/src/test/java/org/springframework/web/service/invoker/NamedValueArgumentResolverTests.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,8 @@ protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) {
220220
}
221221

222222
@Override
223-
protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) {
224-
this.testValues.add(name, value);
223+
protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) {
224+
this.testValues.add(name, (String) value);
225225
}
226226
}
227227

0 commit comments

Comments
 (0)