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
|
@Override
|
||||||
public void resolve(
|
public boolean resolve(
|
||||||
@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues) {
|
@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues) {
|
||||||
|
|
||||||
if (argument == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (argument instanceof HttpMethod httpMethod) {
|
if (argument instanceof HttpMethod httpMethod) {
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
logger.trace("Resolved HTTP method to: " + httpMethod.name());
|
logger.trace("Resolved HTTP method to: " + httpMethod.name());
|
||||||
}
|
}
|
||||||
requestValues.setHttpMethod(httpMethod);
|
requestValues.setHttpMethod(httpMethod);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,8 @@ public interface HttpServiceArgumentResolver {
|
||||||
* @param argument the argument value
|
* @param argument the argument value
|
||||||
* @param parameter the method parameter for the argument
|
* @param parameter the method parameter for the argument
|
||||||
* @param requestValues builder to add HTTP request values to
|
* @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.DefaultParameterNameDiscoverer;
|
||||||
import org.springframework.core.MethodParameter;
|
import org.springframework.core.MethodParameter;
|
||||||
import org.springframework.core.ParameterNameDiscoverer;
|
|
||||||
import org.springframework.core.ParameterizedTypeReference;
|
import org.springframework.core.ParameterizedTypeReference;
|
||||||
import org.springframework.core.ReactiveAdapter;
|
import org.springframework.core.ReactiveAdapter;
|
||||||
import org.springframework.core.ReactiveAdapterRegistry;
|
import org.springframework.core.ReactiveAdapterRegistry;
|
||||||
|
@ -81,9 +80,14 @@ final class HttpServiceMethod {
|
||||||
|
|
||||||
private static MethodParameter[] initMethodParameters(Method method) {
|
private static MethodParameter[] initMethodParameters(Method method) {
|
||||||
int count = method.getParameterCount();
|
int count = method.getParameterCount();
|
||||||
|
if (count == 0) {
|
||||||
|
return new MethodParameter[0];
|
||||||
|
}
|
||||||
|
DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
|
||||||
MethodParameter[] parameters = new MethodParameter[count];
|
MethodParameter[] parameters = new MethodParameter[count];
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
parameters[i] = new MethodParameter(method, i);
|
parameters[i] = new MethodParameter(method, i);
|
||||||
|
parameters[i].initParameterNameDiscovery(nameDiscoverer);
|
||||||
}
|
}
|
||||||
return parameters;
|
return parameters;
|
||||||
}
|
}
|
||||||
|
@ -103,12 +107,12 @@ final class HttpServiceMethod {
|
||||||
|
|
||||||
private void applyArguments(HttpRequestValues.Builder requestValues, Object[] arguments) {
|
private void applyArguments(HttpRequestValues.Builder requestValues, Object[] arguments) {
|
||||||
Assert.isTrue(arguments.length == this.parameters.length, "Method argument mismatch");
|
Assert.isTrue(arguments.length == this.parameters.length, "Method argument mismatch");
|
||||||
for (int i = 0; i < this.parameters.length; i++) {
|
for (int i = 0; i < arguments.length; i++) {
|
||||||
Object argumentValue = arguments[i];
|
Object value = arguments[i];
|
||||||
ParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer();
|
|
||||||
this.parameters[i].initParameterNameDiscovery(nameDiscoverer);
|
|
||||||
for (HttpServiceArgumentResolver resolver : this.argumentResolvers) {
|
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")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public void resolve(
|
public boolean resolve(
|
||||||
@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues) {
|
@Nullable Object argument, MethodParameter parameter, HttpRequestValues.Builder requestValues) {
|
||||||
|
|
||||||
PathVariable annotation = parameter.getParameterAnnotation(PathVariable.class);
|
PathVariable annotation = parameter.getParameterAnnotation(PathVariable.class);
|
||||||
if (annotation == null) {
|
if (annotation == null) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Map.class.isAssignableFrom(parameter.getParameterType())) {
|
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);
|
Assert.notNull(name, "Failed to determine path variable name for parameter: " + parameter);
|
||||||
addUriParameter(name, argument, annotation.required(), requestValues);
|
addUriParameter(name, argument, annotation.required(), requestValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addUriParameter(
|
private void addUriParameter(
|
||||||
|
|
Loading…
Reference in New Issue