diff --git a/spring-web/src/main/java/org/springframework/web/service/invoker/AbstractNamedValueArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/service/invoker/AbstractNamedValueArgumentResolver.java index 717fbcf4df..c24421bf9c 100644 --- a/spring-web/src/main/java/org/springframework/web/service/invoker/AbstractNamedValueArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/service/invoker/AbstractNamedValueArgumentResolver.java @@ -43,13 +43,15 @@ public abstract class AbstractNamedValueArgumentResolver implements HttpServiceA protected final Log logger = LogFactory.getLog(getClass()); + + @Nullable private final ConversionService conversionService; private final Map namedValueInfoCache = new ConcurrentHashMap<>(256); /** - * Create an instance. + * Constructor for a resolver to a String value. * @param conversionService the {@link ConversionService} to use to format * Object to String values */ @@ -58,12 +60,11 @@ public abstract class AbstractNamedValueArgumentResolver implements HttpServiceA this.conversionService = conversionService; } - /** - * Return the configured {@link ConversionService}. + * Constructor for a resolver to an Object value, without conversion. */ - public ConversionService getConversionService() { - return this.conversionService; + protected AbstractNamedValueArgumentResolver() { + this.conversionService = null; } @@ -166,8 +167,8 @@ public abstract class AbstractNamedValueArgumentResolver implements HttpServiceA value = defaultValue; } - if (!(value instanceof String)) { - value = getConversionService().convert(value, String.class); + if (this.conversionService != null && !(value instanceof String)) { + value = this.conversionService.convert(value, String.class); } if (value == null) { @@ -179,17 +180,19 @@ public abstract class AbstractNamedValueArgumentResolver implements HttpServiceA logger.trace("Resolved " + valueLabel + " value '" + name + ":" + value + "'"); } - addRequestValue(name, (String) value, requestValues); + addRequestValue(name, value, requestValues); } /** * Add the given, single request value. This may be called multiples times * if the request value is multivalued. + *

If the resolver was created with a {@link ConversionService}, the value + * will have been converted to a String and may be cast down. * @param name the request value name * @param value the value * @param requestValues builder to add the request value to */ - protected abstract void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues); + protected abstract void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues); /** diff --git a/spring-web/src/main/java/org/springframework/web/service/invoker/CookieValueArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/service/invoker/CookieValueArgumentResolver.java index e896e8fe65..9c5ba8fc59 100644 --- a/spring-web/src/main/java/org/springframework/web/service/invoker/CookieValueArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/service/invoker/CookieValueArgumentResolver.java @@ -63,8 +63,8 @@ public class CookieValueArgumentResolver extends AbstractNamedValueArgumentResol } @Override - protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) { - requestValues.addCookie(name, value); + protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) { + requestValues.addCookie(name, (String) value); } } diff --git a/spring-web/src/main/java/org/springframework/web/service/invoker/PathVariableArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/service/invoker/PathVariableArgumentResolver.java index 810c3f3c0c..6664ad20d7 100644 --- a/spring-web/src/main/java/org/springframework/web/service/invoker/PathVariableArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/service/invoker/PathVariableArgumentResolver.java @@ -55,8 +55,8 @@ public class PathVariableArgumentResolver extends AbstractNamedValueArgumentReso } @Override - protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) { - requestValues.setUriVariable(name, value); + protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) { + requestValues.setUriVariable(name, (String) value); } } diff --git a/spring-web/src/main/java/org/springframework/web/service/invoker/RequestHeaderArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/service/invoker/RequestHeaderArgumentResolver.java index 46ff6ff9a1..7d46b8b1f7 100644 --- a/spring-web/src/main/java/org/springframework/web/service/invoker/RequestHeaderArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/service/invoker/RequestHeaderArgumentResolver.java @@ -64,8 +64,8 @@ public class RequestHeaderArgumentResolver extends AbstractNamedValueArgumentRes } @Override - protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) { - requestValues.addHeader(name, value); + protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) { + requestValues.addHeader(name, (String) value); } } diff --git a/spring-web/src/main/java/org/springframework/web/service/invoker/RequestParamArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/service/invoker/RequestParamArgumentResolver.java index 566c6f6f27..d7b904db1e 100644 --- a/spring-web/src/main/java/org/springframework/web/service/invoker/RequestParamArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/service/invoker/RequestParamArgumentResolver.java @@ -67,8 +67,8 @@ public class RequestParamArgumentResolver extends AbstractNamedValueArgumentReso } @Override - protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) { - requestValues.addRequestParameter(name, value); + protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) { + requestValues.addRequestParameter(name, (String) value); } } diff --git a/spring-web/src/test/java/org/springframework/web/service/invoker/NamedValueArgumentResolverTests.java b/spring-web/src/test/java/org/springframework/web/service/invoker/NamedValueArgumentResolverTests.java index d447200490..c1931329e1 100644 --- a/spring-web/src/test/java/org/springframework/web/service/invoker/NamedValueArgumentResolverTests.java +++ b/spring-web/src/test/java/org/springframework/web/service/invoker/NamedValueArgumentResolverTests.java @@ -220,8 +220,8 @@ class NamedValueArgumentResolverTests { } @Override - protected void addRequestValue(String name, String value, HttpRequestValues.Builder requestValues) { - this.testValues.add(name, value); + protected void addRequestValue(String name, Object value, HttpRequestValues.Builder requestValues) { + this.testValues.add(name, (String) value); } }