@ -97,9 +97,8 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
@@ -97,9 +97,8 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
* Create a { @link 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 .
*
* @param controllerType the controller to build a URI for
* @return a UriComponentsBuilder instance , never { @code null }
* @return a UriComponentsBuilder instance ( never { @code null } )
* /
public static UriComponentsBuilder fromController ( Class < ? > controllerType ) {
String mapping = getTypeRequestMapping ( controllerType ) ;
@ -124,14 +123,11 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
@@ -124,14 +123,11 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
* Create a { @link UriComponentsBuilder } from the mapping of a controller method
* and an array of method argument values . This method delegates to
* { @link # fromMethod ( java . lang . reflect . Method , Object . . . ) } .
*
* @param controllerType the controller
* @param methodName the method name
* @param argumentValues the argument values
* @return a UriComponentsBuilder instance , never { @code null }
*
* @throws java . lang . IllegalStateException if there is no matching or more than
* one matching method .
* @throws IllegalStateException if there is no matching or more than one matching method
* /
public static UriComponentsBuilder fromMethodName ( Class < ? > controllerType , String methodName , Object . . . argumentValues ) {
Method method = getMethod ( controllerType , methodName , argumentValues ) ;
@ -160,8 +156,7 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
@@ -160,8 +156,7 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
* Create a { @link UriComponentsBuilder } by invoking a "mock" controller method .
* The controller method and the supplied argument values are then used to
* delegate to { @link # fromMethod ( java . lang . reflect . Method , Object . . . ) } .
* < p >
* For example given this controller :
* < p > For example , given this controller :
* < pre class = "code" >
* & # 064 ; RequestMapping ( "/people/{id}/addresses" )
* class AddressController {
@ -188,7 +183,6 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
@@ -188,7 +183,6 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
* controller . getAddressesForCountry ( "US" )
* builder = MvcUriComponentsBuilder . fromMethodCall ( controller ) ;
* < / pre >
*
* @param invocationInfo either the value returned from a "mock" controller
* invocation or the "mock" controller itself after an invocation
* @return a UriComponents instance
@ -206,27 +200,19 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
@@ -206,27 +200,19 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
* HandlerMethodMappingNamingStrategy } assigns a default name to every
* { @code @RequestMapping } method but an explicit name may also be assigned
* through the { @code @RequestMapping } name attribute .
*
* < p > This is intended for use in EL expressions , typically in JSPs or other
* view templates , which can use the convenience method :
* { @link org . springframework . web . servlet . support . RequestContext # getMvcUrl ( String , Object . . . )
* RequestContext . getMvcUrl ( String , Object . . . ) } ) .
*
* view templates , which can use the convenience method { @link # toUriString ( ) } .
* < p > The default naming convention for mappings is based on the capital
* letters of the class name , followed by "#" as a separator , and the method
* name . For example "TC#getFoo" for a class named TestController with method
* getFoo . Use explicit names where the naming convention does not produce
* unique results .
*
* @param name the mapping name
* @param argumentValues argument values for the controller method ; those values
* are important for { @code @RequestParam } and { @code @PathVariable } arguments
* but may be passed as { @code null } otherwise .
*
* are important for { @code @RequestParam } and { @code @PathVariable } arguments
* but may be passed as { @code null } otherwise .
* @return the UriComponentsBuilder
*
* @throws java . lang . IllegalStateException if the mapping name is not found
* or there is no unique match
* @throws IllegalStateException if the mapping name is not found or there is no unique match
* /
public static UriComponentsBuilder fromMappingName ( String name , Object . . . argumentValues ) {
RequestMappingInfoHandlerMapping hm = getRequestMappingInfoHandlerMapping ( ) ;
@ -243,20 +229,17 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
@@ -243,20 +229,17 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
* { @code @PathVariable } are used for building the URI ( via implementations of
* { @link org . springframework . web . method . support . UriComponentsContributor } )
* while remaining argument values are ignored and can be { @code null } .
*
* @param method the controller method
* @param argumentValues argument values for the controller method
* @return a UriComponentsBuilder instance , never { @code null }
* /
public static UriComponentsBuilder fromMethod ( Method method , Object . . . argumentValues ) {
String typePath = getTypeRequestMapping ( method . getDeclaringClass ( ) ) ;
String methodPath = getMethodRequestMapping ( method ) ;
String path = pathMatcher . combine ( typePath , methodPath ) ;
UriComponentsBuilder builder = ServletUriComponentsBuilder . fromCurrentServletMapping ( ) . path ( path ) ;
UriComponents uriComponents = applyContributors ( builder , method , argumentValues ) ;
return ServletUriComponentsBuilder . newInstance ( ) . uriComponents ( uriComponents ) ;
}
@ -287,14 +270,13 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
@@ -287,14 +270,13 @@ public class MvcUriComponentsBuilder extends UriComponentsBuilder {
" does not match number of argument values " + argCount ) ;
final Map < String , Object > uriVars = new HashMap < String , Object > ( ) ;
for ( int i = 0 ; i < paramCount ; i + + ) {
for ( int i = 0 ; i < paramCount ; i + + ) {
MethodParameter param = new MethodParameter ( method , i ) ;
param . initParameterNameDiscovery ( parameterNameDiscoverer ) ;
contributor . contributeMethodArgument ( param , args [ i ] , builder , uriVars ) ;
}
// We may not have all URI var values, expand only what we have
return builder . build ( ) . expand ( new UriComponents . UriTemplateVariables ( ) {
@Override
public Object getValue ( String name ) {