Update HttpMethodArgumentResolver
Boolean return value indicates if the value was resolved or not. See gh-28386
This commit is contained in:
parent
b1384ddafa
commit
62ab360f64
|
@ -37,18 +37,18 @@ public class HttpMethodArgumentResolver implements HttpServiceArgumentResolver {
|
|||
|
||||
|
||||
@Override
|
||||
public void resolve(
|
||||
public boolean resolve(
|
||||
@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues) {
|
||||
|
||||
if (argument == null) {
|
||||
return;
|
||||
}
|
||||
if (argument instanceof HttpMethod httpMethod) {
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Resolved HTTP method to: " + httpMethod.name());
|
||||
}
|
||||
requestValues.setHttpMethod(httpMethod);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -35,7 +35,8 @@ public interface HttpServiceArgumentResolver {
|
|||
* @param argument the argument value
|
||||
* @param parameter the method parameter for the argument
|
||||
* @param requestValues builder to add HTTP request values to
|
||||
* @return {@code true} if the argument was resolved, {@code false} otherwise
|
||||
*/
|
||||
void resolve(@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues);
|
||||
boolean resolve(@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues);
|
||||
|
||||
}
|
||||
|
|
|
@ -30,7 +30,6 @@ import reactor.core.publisher.Mono;
|
|||
|
||||
import org.springframework.core.DefaultParameterNameDiscoverer;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.ParameterNameDiscoverer;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.core.ReactiveAdapter;
|
||||
import org.springframework.core.ReactiveAdapterRegistry;
|
||||
|
@ -81,9 +80,14 @@ final class HttpServiceMethod {
|
|||
|
||||
private static MethodParameter[] initMethodParameters(Method method) {
|
||||
int count = method.getParameterCount();
|
||||
if (count == 0) {
|
||||
return new MethodParameter[0];
|
||||
}
|
||||
DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
|
||||
MethodParameter[] parameters = new MethodParameter[count];
|
||||
for (int i = 0; i < count; i++) {
|
||||
parameters[i] = new MethodParameter(method, i);
|
||||
parameters[i].initParameterNameDiscovery(nameDiscoverer);
|
||||
}
|
||||
return parameters;
|
||||
}
|
||||
|
@ -103,12 +107,12 @@ final class HttpServiceMethod {
|
|||
|
||||
private void applyArguments(HttpRequestValues.Builder requestValues, Object[] arguments) {
|
||||
Assert.isTrue(arguments.length == this.parameters.length, "Method argument mismatch");
|
||||
for (int i = 0; i < this.parameters.length; i++) {
|
||||
Object argumentValue = arguments[i];
|
||||
ParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
|
||||
this.parameters[i].initParameterNameDiscovery(nameDiscoverer);
|
||||
for (int i = 0; i < arguments.length; i++) {
|
||||
Object value = arguments[i];
|
||||
for (HttpServiceArgumentResolver resolver : this.argumentResolvers) {
|
||||
resolver.resolve(argumentValue, this.parameters[i], requestValues);
|
||||
if (resolver.resolve(value, this.parameters[i], requestValues)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,12 +55,12 @@ public class PathVariableArgumentResolver implements HttpServiceArgumentResolver
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void resolve(
|
||||
public boolean resolve(
|
||||
@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues) {
|
||||
|
||||
PathVariable annotation = parameter.getParameterAnnotation(PathVariable.class);
|
||||
if (annotation == null) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Map.class.isAssignableFrom(parameter.getParameterType())) {
|
||||
|
@ -76,6 +76,8 @@ public class PathVariableArgumentResolver implements HttpServiceArgumentResolver
|
|||
Assert.notNull(name, "Failed to determine path variable name for parameter: " + parameter);
|
||||
addUriParameter(name, argument, annotation.required(), requestValues);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void addUriParameter(
|
||||
|
|
Loading…
Reference in New Issue