背景
spring-boot的版本是2.1.4.RELEASE,spring的版本是5.1.6.RELEASE
一个例子如下:
@Configuration
@Import(WebMvcAutoConfiguration.EnableWebMvcConfiguration.class)
@SuppressWarnings("unchecked")
public class WebConfig implements WebMvcConfigurer, WebMvcRegistrations {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new RequestMappingHandlerMapping();
}
}
@RestController
public class ParamController {
@GetMapping(value = "/param/{param1}")
public String param(@PathVariable("param1") String param1) {
return param1;
}
}
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
启动一下,访问http://127.0.0.1:8080/param/hehe
和http://127.0.0.1:8080/param/hehe.hehe
都返回hehe
如果访问http://127.0.0.1:8080/param/hehe.hehe.hehe
,它会返回hehe.hehe
所以会发现它把最后一个小数点后面的字符给截掉了,那如果我们想要获取完整的字符串,该怎么办呢?
原因
下面的例子都是根据http://127.0.0.1:8080/param/hehe.hehe这个url来调试的
- 参数怎么来的
入口在InvocableHandlerMethod.invokeForRequest
,如下:
是根据PathVariableMethodArgumentResolver.resolveName
得来的,如下:
HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE = HandlerMapping.class.getName() + ".uriTemplateVariables";
什么时候放进attributes
里的?,在RequestMappingInfoHandlerMapping.handleMatch
,如下:
</