Skip to content

Commit 62ab360

Browse files
committed
Update HttpMethodArgumentResolver
Boolean return value indicates if the value was resolved or not. See gh-28386
1 parent b1384dd commit 62ab360

File tree

4 files changed

+20
-13
lines changed

4 files changed

+20
-13
lines changed

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,18 @@ public class HttpMethodArgumentResolver implements HttpServiceArgumentResolver {
3737

3838

3939
@Override
40-
public void resolve(
40+
public boolean resolve(
4141
@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues) {
4242

43-
if (argument == null) {
44-
return;
45-
}
4643
if (argument instanceof HttpMethod httpMethod) {
4744
if (logger.isTraceEnabled()) {
4845
logger.trace("Resolved HTTP method to: " + httpMethod.name());
4946
}
5047
requestValues.setHttpMethod(httpMethod);
48+
return true;
5149
}
50+
51+
return false;
5252
}
5353

5454
}

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public interface HttpServiceArgumentResolver {
3535
* @param argument the argument value
3636
* @param parameter the method parameter for the argument
3737
* @param requestValues builder to add HTTP request values to
38+
* @return {@code true} if the argument was resolved, {@code false} otherwise
3839
*/
39-
void resolve(@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues);
40+
boolean resolve(@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues);
4041

4142
}

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

+10-6
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
import org.springframework.core.DefaultParameterNameDiscoverer;
3232
import org.springframework.core.MethodParameter;
33-
import org.springframework.core.ParameterNameDiscoverer;
3433
import org.springframework.core.ParameterizedTypeReference;
3534
import org.springframework.core.ReactiveAdapter;
3635
import org.springframework.core.ReactiveAdapterRegistry;
@@ -81,9 +80,14 @@ final class HttpServiceMethod {
8180

8281
private static MethodParameter[] initMethodParameters(Method method) {
8382
int count = method.getParameterCount();
83+
if (count == 0) {
84+
return new MethodParameter[0];
85+
}
86+
DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
8487
MethodParameter[] parameters = new MethodParameter[count];
8588
for (int i = 0; i < count; i++) {
8689
parameters[i] = new MethodParameter(method, i);
90+
parameters[i].initParameterNameDiscovery(nameDiscoverer);
8791
}
8892
return parameters;
8993
}
@@ -103,12 +107,12 @@ public Object invoke(Object[] arguments) {
103107

104108
private void applyArguments(HttpRequestValues.Builder requestValues, Object[] arguments) {
105109
Assert.isTrue(arguments.length == this.parameters.length, "Method argument mismatch");
106-
for (int i = 0; i < this.parameters.length; i++) {
107-
Object argumentValue = arguments[i];
108-
ParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
109-
this.parameters[i].initParameterNameDiscovery(nameDiscoverer);
110+
for (int i = 0; i < arguments.length; i++) {
111+
Object value = arguments[i];
110112
for (HttpServiceArgumentResolver resolver : this.argumentResolvers) {
111-
resolver.resolve(argumentValue, this.parameters[i], requestValues);
113+
if (resolver.resolve(value, this.parameters[i], requestValues)) {
114+
break;
115+
}
112116
}
113117
}
114118
}

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ public PathVariableArgumentResolver(ConversionService conversionService) {
5555

5656
@SuppressWarnings("unchecked")
5757
@Override
58-
public void resolve(
58+
public boolean resolve(
5959
@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues) {
6060

6161
PathVariable annotation = parameter.getParameterAnnotation(PathVariable.class);
6262
if (annotation == null) {
63-
return;
63+
return false;
6464
}
6565

6666
if (Map.class.isAssignableFrom(parameter.getParameterType())) {
@@ -76,6 +76,8 @@ public void resolve(
7676
Assert.notNull(name, "Failed to determine path variable name for parameter: " + parameter);
7777
addUriParameter(name, argument, annotation.required(), requestValues);
7878
}
79+
80+
return true;
7981
}
8082

8183
private void addUriParameter(

0 commit comments

Comments
 (0)