Class MvcUriComponentsBuilder
UriComponentsBuilder
 by pointing to @RequestMapping methods on Spring MVC controllers.
 There are several groups of methods:
- Static fromXxx(...)methods to prepare links using information from the current request as determined by a call toServletUriComponentsBuilder.fromCurrentServletMapping().
- Static fromXxx(UriComponentsBuilder,...)methods can be given a baseUrl when operating outside the context of a request.
- Instance-based withXxx(...)methods where an instance of MvcUriComponentsBuilder is created with a baseUrl viarelativeTo(org.springframework.web.util.UriComponentsBuilder).
Note: As of 5.1, methods in this class do not extract
 "Forwarded" and "X-Forwarded-*" headers that specify the
 client-originated address. Please, use
 ForwardedHeaderFilter, or similar from the underlying server, to extract
 and use such headers, or to discard them.
- Since:
- 4.0
- Author:
- Oliver Gierke, Rossen Stoyanchev, Sam Brannen, Juergen Hoeller
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic classBuilder class to create URLs for method arguments.static interfaceMethod invocation information.
- 
Field SummaryFieldsModifier and TypeFieldDescriptionstatic final StringWell-known name for theCompositeUriComponentsContributorobject in the bean factory.
- 
Constructor SummaryConstructorsModifierConstructorDescriptionprotectedDefault constructor.
- 
Method SummaryModifier and TypeMethodDescriptionstatic <T> Tcontroller(Class<T> controllerType) Return a "mock" controller instance.static UriComponentsBuilderfromController(Class<?> controllerType) Create aUriComponentsBuilderfrom the mapping of a controller class and current request information including Servlet mapping.static UriComponentsBuilderfromController(UriComponentsBuilder builder, Class<?> controllerType) An alternative tofromController(Class)that accepts aUriComponentsBuilderrepresenting the base URL.fromMappingName(String mappingName) Create a URL from the name of a Spring MVC controller method's request mapping.fromMappingName(UriComponentsBuilder builder, String name) An alternative tofromMappingName(String)that accepts aUriComponentsBuilderrepresenting the base URL.static UriComponentsBuilderfromMethod(Class<?> controllerType, Method method, Object... args) Create aUriComponentsBuilderfrom the mapping of a controller method and an array of method argument values.static UriComponentsBuilderfromMethod(UriComponentsBuilder baseUrl, Class<?> controllerType, Method method, Object... args) An alternative tofromMethod(Class, Method, Object...)that accepts aUriComponentsBuilderrepresenting the base URL.static UriComponentsBuilderfromMethodCall(Object info) Create aUriComponentsBuilderby invoking a "mock" controller method.static UriComponentsBuilderfromMethodCall(UriComponentsBuilder builder, Object info) An alternative tofromMethodCall(Object)that accepts aUriComponentsBuilderrepresenting the base URL.static UriComponentsBuilderfromMethodName(Class<?> controllerType, String methodName, Object... args) Create aUriComponentsBuilderfrom the mapping of a controller method and an array of method argument values.static UriComponentsBuilderfromMethodName(UriComponentsBuilder builder, Class<?> controllerType, String methodName, Object... args) An alternative tofromMethodName(Class, String, Object...)that accepts aUriComponentsBuilderrepresenting the base URL.static <T> TReturn a "mock" controller instance.static MvcUriComponentsBuilderrelativeTo(UriComponentsBuilder baseUrl) Create an instance of this class with a base URL.withController(Class<?> controllerType) An alternative tofromController(Class)for use with an instance of this class created via a call torelativeTo(org.springframework.web.util.UriComponentsBuilder).withMappingName(String mappingName) An alternative tofromMappingName(String)for use with an instance of this class created viarelativeTo(org.springframework.web.util.UriComponentsBuilder).withMethod(Class<?> controllerType, Method method, Object... args) An alternative tofromMethod(Class, Method, Object...)for use with an instance of this class created viarelativeTo(org.springframework.web.util.UriComponentsBuilder).withMethodCall(Object invocationInfo) An alternative tofromMethodCall(Object)for use with an instance of this class created viarelativeTo(org.springframework.web.util.UriComponentsBuilder).withMethodName(Class<?> controllerType, String methodName, Object... args) An alternative tofromMethodName(Class, String, Object...)for use with an instance of this class created viarelativeTo(org.springframework.web.util.UriComponentsBuilder).
- 
Field Details- 
MVC_URI_COMPONENTS_CONTRIBUTOR_BEAN_NAMEWell-known name for theCompositeUriComponentsContributorobject in the bean factory.- See Also:
 
 
- 
- 
Constructor Details- 
MvcUriComponentsBuilderDefault constructor. Protected to prevent direct instantiation.
 
- 
- 
Method Details- 
relativeToCreate an instance of this class with a base URL. After that calls to one of the instance basedwithXxx(...)methods will create URLs relative to the given base URL.
- 
fromControllerCreate aUriComponentsBuilderfrom 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.- Parameters:
- controllerType- the controller to build a URI for
- Returns:
- a UriComponentsBuilder instance (never null)
 
- 
fromControllerpublic static UriComponentsBuilder fromController(@Nullable UriComponentsBuilder builder, Class<?> controllerType) An alternative tofromController(Class)that accepts aUriComponentsBuilderrepresenting 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.- Parameters:
- 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 for
- Returns:
- a UriComponentsBuilder instance (never null)
 
- 
fromMethodNamepublic static UriComponentsBuilder fromMethodName(Class<?> controllerType, String methodName, Object... args) Create aUriComponentsBuilderfrom the mapping of a controller method and an array of method argument values. This method delegates tofromMethod(Class, Method, Object...).- Parameters:
- controllerType- the controller
- methodName- the method name
- args- the argument values
- Returns:
- a UriComponentsBuilder instance, never null
- Throws:
- IllegalArgumentException- if there is no matching or if there is more than one matching method
 
- 
fromMethodNamepublic static UriComponentsBuilder fromMethodName(UriComponentsBuilder builder, Class<?> controllerType, String methodName, Object... args) An alternative tofromMethodName(Class, String, Object...)that accepts aUriComponentsBuilderrepresenting 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.- Parameters:
- 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
- methodName- the method name
- args- the argument values
- Returns:
- a UriComponentsBuilder instance, never null
- Throws:
- IllegalArgumentException- if there is no matching or if there is more than one matching method
 
- 
fromMethodpublic static UriComponentsBuilder fromMethod(Class<?> controllerType, Method method, Object... args) Create aUriComponentsBuilderfrom 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@RequestParamand@PathVariableare used for building the URI (via implementations ofUriComponentsContributor) while remaining argument values are ignored and can benull.- Parameters:
- controllerType- the controller type
- method- the controller method
- args- argument values for the controller method
- Returns:
- a UriComponentsBuilder instance, never null
- Since:
- 4.2
 
- 
fromMethodpublic static UriComponentsBuilder fromMethod(UriComponentsBuilder baseUrl, @Nullable Class<?> controllerType, Method method, Object... args) An alternative tofromMethod(Class, Method, Object...)that accepts aUriComponentsBuilderrepresenting 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.- Parameters:
- 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 type
- method- the controller method
- args- argument values for the controller method
- Returns:
- a UriComponentsBuilder instance (never null)
- Since:
- 4.2
 
- 
fromMethodCallCreate aUriComponentsBuilderby invoking a "mock" controller method. The controller method and the supplied argument values are then used to delegate tofromMethod(Class, Method, Object...).For example, given this controller: @RequestMapping("/people/{id}/addresses") class AddressController { @GetMapping("/{country}") public HttpEntity<Void> getAddressesForCountry(@PathVariable String country) { ... } @PostMapping 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);- Parameters:
- info- either the value returned from a "mock" controller invocation or the "mock" controller itself after an invocation
- Returns:
- a UriComponents instance
- See Also:
 
- 
fromMethodCallAn alternative tofromMethodCall(Object)that accepts aUriComponentsBuilderrepresenting 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.- Parameters:
- 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 invocation
- Returns:
- a UriComponents instance
 
- 
onReturn a "mock" controller instance. When an@RequestMappingmethod on the controller is invoked, the supplied argument values are remembered and the result can then be used to create aUriComponentsBuilderviafromMethodCall(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(); - Parameters:
- controllerType- the target controller
 
- 
controllerReturn a "mock" controller instance. When an@RequestMappingmethod on the controller is invoked, the supplied argument values are remembered and the result can then be used to createUriComponentsBuilderviafromMethodCall(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); - Parameters:
- controllerType- the target controller
 
- 
fromMappingNameCreate a URL from the name of a Spring MVC controller method's request mapping.The configured HandlerMethodMappingNamingStrategydetermines 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@RequestMappingannotation.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<Void> 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 @RequestParamand@PathVariable).- Parameters:
- mappingName- the mapping name
- Returns:
- a builder to prepare the URI String
- Throws:
- IllegalArgumentException- if the mapping name is not found or if there is no unique match
- Since:
- 4.1
 
- 
fromMappingNamepublic static MvcUriComponentsBuilder.MethodArgumentBuilder fromMappingName(@Nullable UriComponentsBuilder builder, String name) An alternative tofromMappingName(String)that accepts aUriComponentsBuilderrepresenting 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.- Parameters:
- 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 name
- Returns:
- a builder to prepare the URI String
- Throws:
- IllegalArgumentException- if the mapping name is not found or if there is no unique match
- Since:
- 4.2
 
- 
withControllerAn alternative tofromController(Class)for use with an instance of this class created via a call torelativeTo(org.springframework.web.util.UriComponentsBuilder).- Since:
- 4.2
 
- 
withMethodNamepublic UriComponentsBuilder withMethodName(Class<?> controllerType, String methodName, Object... args) An alternative tofromMethodName(Class, String, Object...)for use with an instance of this class created viarelativeTo(org.springframework.web.util.UriComponentsBuilder).- Since:
- 4.2
 
- 
withMethodCallAn alternative tofromMethodCall(Object)for use with an instance of this class created viarelativeTo(org.springframework.web.util.UriComponentsBuilder).- Since:
- 4.2
 
- 
withMappingNameAn alternative tofromMappingName(String)for use with an instance of this class created viarelativeTo(org.springframework.web.util.UriComponentsBuilder).- Since:
- 4.2
 
- 
withMethodAn alternative tofromMethod(Class, Method, Object...)for use with an instance of this class created viarelativeTo(org.springframework.web.util.UriComponentsBuilder).- Since:
- 4.2
 
 
-