public class FrameworkMvcUriComponentsBuilder extends Object
FrameworkMapping annotations. Since this class isn't extensible due to
heavy usage of private we had to copy and modify the whole class. Spring version updates
should seek to take in changes from MvcUriComponentsBuilder into this class.
Creates instances of UriComponentsBuilder by pointing to
Spring MVC controllers and @RequestMapping methods.
The static fromXxx(...) methods prepare links relative to the current request as
determined by a call to
ServletUriComponentsBuilder.fromCurrentServletMapping().
The static fromXxx(UriComponentsBuilder,...) methods can be given the baseUrl when
operating outside the context of a request.
You can also create an MvcUriComponentsBuilder instance with a baseUrl via
relativeTo(org.springframework.web.util.UriComponentsBuilder) and then use the
non-static withXxx(...) method variants.
Note: This class uses values from "Forwarded"
(RFC 7239), "X-Forwarded-Host",
"X-Forwarded-Port", and "X-Forwarded-Proto" headers, if present, in order to reflect the
client-originated protocol and address. Consider using the ForwardedHeaderFilter in order
to choose from a central place whether to extract and use, or to discard such headers. See the
Spring Framework reference for more on this filter.
MvcUriComponentsBuilder| Modifier and Type | Class and Description |
|---|---|
static class |
FrameworkMvcUriComponentsBuilder.MethodArgumentBuilder |
static interface |
FrameworkMvcUriComponentsBuilder.MethodInvocationInfo |
| Modifier and Type | Field and Description |
|---|---|
static String |
MVC_URI_COMPONENTS_CONTRIBUTOR_BEAN_NAME
Well-known name for the
CompositeUriComponentsContributor object in the bean factory. |
| Modifier | Constructor and Description |
|---|---|
protected |
FrameworkMvcUriComponentsBuilder(org.springframework.web.util.UriComponentsBuilder baseUrl)
Default constructor.
|
| Modifier and Type | Method and Description |
|---|---|
static <T> T |
controller(Class<T> controllerType)
Return a "mock" controller instance.
|
static org.springframework.web.util.UriComponentsBuilder |
fromController(Class<?> controllerType)
Create a
UriComponentsBuilder from the mapping of a controller class and current
request information including Servlet mapping. |
static org.springframework.web.util.UriComponentsBuilder |
fromController(org.springframework.web.util.UriComponentsBuilder builder,
Class<?> controllerType)
An alternative to
fromController(Class) that accepts a UriComponentsBuilder
representing the base URL. |
static FrameworkMvcUriComponentsBuilder.MethodArgumentBuilder |
fromMappingName(String mappingName)
Create a URL from the name of a Spring MVC controller method's request mapping.
|
static FrameworkMvcUriComponentsBuilder.MethodArgumentBuilder |
fromMappingName(org.springframework.web.util.UriComponentsBuilder builder,
String name)
An alternative to
fromMappingName(String) that accepts a
UriComponentsBuilder representing the base URL. |
static org.springframework.web.util.UriComponentsBuilder |
fromMethod(Class<?> controllerType,
Method method,
Object... args)
Create a
UriComponentsBuilder from the mapping of a controller method and an array of
method argument values. |
static org.springframework.web.util.UriComponentsBuilder |
fromMethod(org.springframework.web.util.UriComponentsBuilder baseUrl,
Class<?> controllerType,
Method method,
Object... args)
An alternative to
fromMethod(Class, Method, Object...) that accepts a
UriComponentsBuilder representing the base URL. |
static org.springframework.web.util.UriComponentsBuilder |
fromMethodCall(Object info)
Create a
UriComponentsBuilder by invoking a "mock" controller method. |
static org.springframework.web.util.UriComponentsBuilder |
fromMethodCall(org.springframework.web.util.UriComponentsBuilder builder,
Object info)
An alternative to
fromMethodCall(Object) that accepts a UriComponentsBuilder
representing the base URL. |
static org.springframework.web.util.UriComponentsBuilder |
fromMethodName(Class<?> controllerType,
String methodName,
Object... args)
Create a
UriComponentsBuilder from the mapping of a controller method and an array of
method argument values. |
static org.springframework.web.util.UriComponentsBuilder |
fromMethodName(org.springframework.web.util.UriComponentsBuilder builder,
Class<?> controllerType,
String methodName,
Object... args)
An alternative to
fromMethodName(Class, String, Object...) that accepts a
UriComponentsBuilder representing the base URL. |
static <T> T |
on(Class<T> controllerType)
Return a "mock" controller instance.
|
static FrameworkMvcUriComponentsBuilder |
relativeTo(org.springframework.web.util.UriComponentsBuilder baseUrl)
Create an instance of this class with a base URL.
|
org.springframework.web.util.UriComponentsBuilder |
withController(Class<?> controllerType)
An alternative to
fromController(Class) for use with an instance of this class
created via a call to relativeTo(org.springframework.web.util.UriComponentsBuilder). |
FrameworkMvcUriComponentsBuilder.MethodArgumentBuilder |
withMappingName(String mappingName)
An alternative to
fromMappingName(String) for use with an instance of this class
created via relativeTo(org.springframework.web.util.UriComponentsBuilder). |
org.springframework.web.util.UriComponentsBuilder |
withMethod(Class<?> controllerType,
Method method,
Object... args)
An alternative to
fromMethod(Class, Method, Object...) for use with an instance of
this class created via relativeTo(org.springframework.web.util.UriComponentsBuilder). |
org.springframework.web.util.UriComponentsBuilder |
withMethodCall(Object invocationInfo)
An alternative to
fromMethodCall(Object) for use with an instance of this class
created via relativeTo(org.springframework.web.util.UriComponentsBuilder). |
org.springframework.web.util.UriComponentsBuilder |
withMethodName(Class<?> controllerType,
String methodName,
Object... args)
An alternative to
fromMethodName(Class, String, Object...)} for use with an instance
of this class created via relativeTo(org.springframework.web.util.UriComponentsBuilder). |
public static final String MVC_URI_COMPONENTS_CONTRIBUTOR_BEAN_NAME
CompositeUriComponentsContributor object in the bean factory.protected FrameworkMvcUriComponentsBuilder(org.springframework.web.util.UriComponentsBuilder baseUrl)
public static FrameworkMvcUriComponentsBuilder relativeTo(org.springframework.web.util.UriComponentsBuilder baseUrl)
withXxx(...} methods will create URLs relative to the given base URL.public static org.springframework.web.util.UriComponentsBuilder fromController(Class<?> controllerType)
UriComponentsBuilder from the mapping of a controller class and current
request information including Servlet mapping. If the controller contains multiple mappings,
only the first one is used.
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
controllerType - the controller to build a URI fornull)public static org.springframework.web.util.UriComponentsBuilder fromController(@Nullable
org.springframework.web.util.UriComponentsBuilder builder,
Class<?> controllerType)
fromController(Class) that accepts a UriComponentsBuilder
representing the base URL. This is useful when using MvcUriComponentsBuilder outside the
context of processing a request or to apply a custom baseUrl not matching the current
request.
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
builder - the builder for the base URL; the builder will be cloned and therefore not
modified and may be re-used for further calls.controllerType - the controller to build a URI fornull)public static org.springframework.web.util.UriComponentsBuilder fromMethodName(Class<?> controllerType, String methodName, Object... args)
UriComponentsBuilder from the mapping of a controller method and an array of
method argument values. This method delegates to
fromMethod(Class, Method, Object...).
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
controllerType - the controllermethodName - the method nameargs - the argument valuesnullIllegalArgumentException - if there is no matching or if there is more than one
matching methodpublic static org.springframework.web.util.UriComponentsBuilder fromMethodName(org.springframework.web.util.UriComponentsBuilder builder,
Class<?> controllerType,
String methodName,
Object... args)
fromMethodName(Class, String, Object...) that accepts a
UriComponentsBuilder representing the base URL. This is useful when using
MvcUriComponentsBuilder outside the context of processing a request or to apply a custom
baseUrl not matching the current request.
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
builder - the builder for the base URL; the builder will be cloned and therefore not
modified and may be re-used for further calls.controllerType - the controllermethodName - the method nameargs - the argument valuesnullIllegalArgumentException - if there is no matching or if there is more than one
matching methodpublic static org.springframework.web.util.UriComponentsBuilder fromMethodCall(Object info)
UriComponentsBuilder by invoking a "mock" controller method. The controller
method and the supplied argument values are then used to delegate to
fromMethod(Class, Method, Object...).
For example, given this controller:
@RequestMapping("/people/{id}/addresses")
class AddressController {
@RequestMapping("/{country}")
public HttpEntity getAddressesForCountry(@PathVariable String country) { ... }
@RequestMapping(value="/", method=RequestMethod.POST)
public void addAddress(Address address) { ... }
}
A UriComponentsBuilder can be created:
// Inline style with static import of "MvcUriComponentsBuilder.on"
MvcUriComponentsBuilder.fromMethodCall(
on(AddressController.class).getAddressesForCountry("US")).buildAndExpand(1);
// Longer form useful for repeated invocation (and void controller methods)
AddressController controller = MvcUriComponentsBuilder.on(AddressController.class);
controller.addAddress(null);
builder = MvcUriComponentsBuilder.fromMethodCall(controller);
controller.getAddressesForCountry("US")
builder = MvcUriComponentsBuilder.fromMethodCall(controller);
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
info - either the value returned from a "mock" controller invocation or the "mock"
controller itself after an invocationpublic static org.springframework.web.util.UriComponentsBuilder fromMethodCall(org.springframework.web.util.UriComponentsBuilder builder,
Object info)
fromMethodCall(Object) that accepts a UriComponentsBuilder
representing the base URL. This is useful when using MvcUriComponentsBuilder outside the
context of processing a request or to apply a custom baseUrl not matching the current
request.
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
builder - the builder for the base URL; the builder will be cloned and therefore not
modified and may be re-used for further calls.info - either the value returned from a "mock" controller invocation or the "mock"
controller itself after an invocationpublic static FrameworkMvcUriComponentsBuilder.MethodArgumentBuilder fromMappingName(String mappingName)
The configured
HandlerMethodMappingNamingStrategy determines the names of controller method request
mappings at startup. By default all mappings are assigned a name based on the capital letters
of the class name, followed by "#" as separator, and then the method name. For example
"PC#getPerson" for a class named PersonController with method getPerson. In case the naming
convention does not produce unique results, an explicit name may be assigned through the name
attribute of the @RequestMapping annotation.
This is aimed primarily for use in view rendering technologies and EL expressions. The Spring URL tag library registers this method as a function called "mvcUrl".
For example, given this controller:
@RequestMapping("/people")
class PersonController {
@RequestMapping("/{id}")
public HttpEntity getPerson(@PathVariable String id) { ... }
}
A JSP can prepare a URL to the controller method as follows:
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<a href="${s:mvcUrl('PC#getPerson').arg(0,"123").build()}">Get Person</a>
Note that it's not necessary to specify all arguments. Only the ones required to prepare the
URL, mainly @RequestParam and @PathVariable).
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
mappingName - the mapping nameIllegalArgumentException - if the mapping name is not found or if there is no unique
matchpublic static FrameworkMvcUriComponentsBuilder.MethodArgumentBuilder fromMappingName(@Nullable org.springframework.web.util.UriComponentsBuilder builder, String name)
fromMappingName(String) that accepts a
UriComponentsBuilder representing the base URL. This is useful when using
MvcUriComponentsBuilder outside the context of processing a request or to apply a custom
baseUrl not matching the current request.
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
builder - the builder for the base URL; the builder will be cloned and therefore not
modified and may be re-used for further calls.name - the mapping nameIllegalArgumentException - if the mapping name is not found or if there is no unique
matchpublic static org.springframework.web.util.UriComponentsBuilder fromMethod(Class<?> controllerType, Method method, Object... args)
UriComponentsBuilder from the mapping of a controller method and an array of
method argument values. The array of values must match the signature of the controller
method. Values for @RequestParam and @PathVariable are used for building the
URI (via implementations of
UriComponentsContributor) while remaining argument values are ignored and can be
null.
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
controllerType - the controller typemethod - the controller methodargs - argument values for the controller methodnullpublic static org.springframework.web.util.UriComponentsBuilder fromMethod(org.springframework.web.util.UriComponentsBuilder baseUrl,
@Nullable
Class<?> controllerType,
Method method,
Object... args)
fromMethod(Class, Method, Object...) that accepts a
UriComponentsBuilder representing the base URL. This is useful when using
MvcUriComponentsBuilder outside the context of processing a request or to apply a custom
baseUrl not matching the current request.
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
baseUrl - the builder for the base URL; the builder will be cloned and therefore not
modified and may be re-used for further calls.controllerType - the controller typemethod - the controller methodargs - argument values for the controller methodnull)public static <T> T on(Class<T> controllerType)
@RequestMapping method on the controller
is invoked, the supplied argument values are remembered and the result can then be used to
create a UriComponentsBuilder via fromMethodCall(Object).
Note that this is a shorthand version of controller(Class) intended for inline use
(with a static import), for example:
MvcUriComponentsBuilder.fromMethodCall(on(FooController.class).getFoo(1)).build();
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
controllerType - the target controllerpublic static <T> T controller(Class<T> controllerType)
@RequestMapping method on the controller
is invoked, the supplied argument values are remembered and the result can then be used to
create UriComponentsBuilder via fromMethodCall(Object).
This is a longer version of on(Class). It is needed with controller methods
returning void as well for repeated invocations.
FooController fooController = controller(FooController.class); fooController.saveFoo(1, null); builder = MvcUriComponentsBuilder.fromMethodCall(fooController); fooController.saveFoo(2, null); builder = MvcUriComponentsBuilder.fromMethodCall(fooController);
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
controllerType - the target controllerpublic org.springframework.web.util.UriComponentsBuilder withController(Class<?> controllerType)
fromController(Class) for use with an instance of this class
created via a call to relativeTo(org.springframework.web.util.UriComponentsBuilder).
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
public org.springframework.web.util.UriComponentsBuilder withMethodName(Class<?> controllerType, String methodName, Object... args)
fromMethodName(Class, String, Object...)} for use with an instance
of this class created via relativeTo(org.springframework.web.util.UriComponentsBuilder).
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
public org.springframework.web.util.UriComponentsBuilder withMethodCall(Object invocationInfo)
fromMethodCall(Object) for use with an instance of this class
created via relativeTo(org.springframework.web.util.UriComponentsBuilder).
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
public FrameworkMvcUriComponentsBuilder.MethodArgumentBuilder withMappingName(String mappingName)
fromMappingName(String) for use with an instance of this class
created via relativeTo(org.springframework.web.util.UriComponentsBuilder).
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
public org.springframework.web.util.UriComponentsBuilder withMethod(Class<?> controllerType, Method method, Object... args)
fromMethod(Class, Method, Object...) for use with an instance of
this class created via relativeTo(org.springframework.web.util.UriComponentsBuilder).
Note: This method extracts values from "Forwarded" and "X-Forwarded-*" headers if found. See class-level docs.
Copyright © 2019. All rights reserved.