@RequestMapping,占位符不起作用

时间:2014-04-30 18:58:10

标签: spring-mvc

所以我花了好几个小时试图让这篇文章的工作顺利进行: 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

1 个答案:

答案 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)