所以我花了好几个小时试图让这篇文章的工作顺利进行: Overriding RequestMapping on SpringMVC controller
但它真的不起作用。到目前为止我所拥有的:
用SpringMVC-servlet.xml中
<context:property-placeholder location="classpath:numbernick.properties"/>
<context:component-scan base-package="com.numbernick" />
<context:annotation-config />
我有一个控制器:
@Value("${requestmapping.test}")
private String test;
@RequestMapping("${requestmapping.test}.html")
public ModelAndView test() {
ModelAndView mav = new ModelAndView();
mav.setViewName(test.html);
log.debug("Test: "+test);
return mav;
}
numbernick.properties:
requestmapping.test=myUrl
这应该可以正常工作。当我打电话给页面时,我得到一个logmessage说&#34;测试:myUrl&#34; 。但!当我打电话给&#34; / $ {requestmapping.test},html&#34;时,就会出现这种情况。它应该与调用&#34; /myUrl.html"一起使用。我绝对不知道为什么会这样。显然,PropertyPlaceholder可以工作,但不能同时工作。 (顺便说一下:它是一个嵌套的RequestMapping。但它也不能在topLvl-RequestMapping上工作)
这怎么可以,我该怎么做才能解决这个问题?我目前正在使用spring verion 3.2.8
答案 0 :(得分:1)
我也遇到了这个问题并且一旦我意识到一个PropertyPlaceholderConfigurer
bean没有加载到存在许多占位符的模块的上下文中就解决了。
简单的解决方案是重构我们的外部化配置。最后,我将@PropertySources
定义和PropertyPlaceholderConfigurer
bean移动到一个通用模块,一切都很顺利:
@Configuration
@PropertySources(value = {@PropertySource("classpath:app-config.properties")})
public class ExternalizedConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
请求映射就像现在预期的那样工作:
@RequestMapping(value="/${foo.bar.rest_proxy_uri}/**", method = RequestMethod.GET)
事实上,在服务器启动时,您会看到占位符已经解决:
2015-05-06 16:21:52 INFO RequestMappingHandlerMapping:220 - Mapped "{[/restProxy/**],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.lang.String> foo.bar.web.controllers.RestfulFooBarProxyController.proxyGet(javax.servlet.http.HttpServletRequest)