WebFlux supports UriBuilder, UriComponentsBuilder args
Issue: SPR-15997
This commit is contained in:
@@ -19,12 +19,15 @@ package org.springframework.web.reactive.result.method.annotation;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.ReactiveAdapterRegistry;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpRequest;
|
||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||
import org.springframework.web.reactive.BindingContext;
|
||||
import org.springframework.web.reactive.result.method.HandlerMethodArgumentResolverSupport;
|
||||
import org.springframework.web.reactive.result.method.SyncHandlerMethodArgumentResolver;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import org.springframework.web.util.UriBuilder;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
/**
|
||||
* Resolves ServerWebExchange-related method argument values of the following types:
|
||||
@@ -33,6 +36,8 @@ import org.springframework.web.server.ServerWebExchange;
|
||||
* <li>{@link ServerHttpRequest}
|
||||
* <li>{@link ServerHttpResponse}
|
||||
* <li>{@link HttpMethod}
|
||||
* <li>{@link UriBuilder} or {@link UriComponentsBuilder} -- for building URL's
|
||||
* relative to the current request
|
||||
* </ul>
|
||||
*
|
||||
* <p>For the {@code WebSession} see {@link WebSessionArgumentResolver}
|
||||
@@ -57,7 +62,8 @@ public class ServerWebExchangeArgumentResolver extends HandlerMethodArgumentReso
|
||||
type -> ServerWebExchange.class.isAssignableFrom(type) ||
|
||||
ServerHttpRequest.class.isAssignableFrom(type) ||
|
||||
ServerHttpResponse.class.isAssignableFrom(type) ||
|
||||
HttpMethod.class == type);
|
||||
HttpMethod.class == type ||
|
||||
UriBuilder.class == type || UriComponentsBuilder.class == type);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -77,6 +83,9 @@ public class ServerWebExchangeArgumentResolver extends HandlerMethodArgumentReso
|
||||
else if (HttpMethod.class == paramType) {
|
||||
return exchange.getRequest().getMethod();
|
||||
}
|
||||
else if (UriBuilder.class == paramType || UriComponentsBuilder.class == paramType) {
|
||||
return UriComponentsBuilder.fromHttpRequest(exchange.getRequest());
|
||||
}
|
||||
else {
|
||||
// should never happen...
|
||||
throw new IllegalArgumentException("Unknown parameter type: " +
|
||||
|
||||
@@ -35,6 +35,9 @@ import org.springframework.web.server.WebSession;
|
||||
*/
|
||||
public class WebSessionArgumentResolver extends HandlerMethodArgumentResolverSupport {
|
||||
|
||||
// We need this resolver separate from ServerWebExchangeArgumentResolver which
|
||||
// implements SyncHandlerMethodArgumentResolver.
|
||||
|
||||
|
||||
public WebSessionArgumentResolver(ReactiveAdapterRegistry adapterRegistry) {
|
||||
super(adapterRegistry);
|
||||
|
||||
Reference in New Issue
Block a user