Jap*_*edi 2 spring spring-mvc spring-el spring-3
我想使Spring应用程序中的请求映射动态化。这样我的网址就无法理解了。而且我可以向用户显示任何无意义的内容,并且仍然可以解决映射的目的。
为此,我将URL的动态部分存储在属性文件中。并希望在@RequestMapping注释中使用它。同样的事情将在JSP的客户端上完成。我将从属性文件中读取值,然后创建href。
我正在使用@Value注释读取属性文件的值。
有一个类将所有此类值保存在最终的静态变量中。
public class UrlMappingAbstraction {
public static final @Value("#{urlAbstractionProperties['url.message']?:'message'}") String MESSAGE = "";
}
Run Code Online (Sandbox Code Playgroud)
我在控制器中扩展此类,并在@RequestMapping注释中使用static final字段,如下所示。
@RequestMapping(value="/"+MESSAGE+"/{id}", method=RequestMethod.GET)
Run Code Online (Sandbox Code Playgroud)
而且在jsp中,我还使用<spring:message/>并在href中生成url 来从属性文件中读取值。
问题是jsp能够基于属性文件值创建正确的url,但是在@RequestMapping批注中我的值没有被替换。
有人可以告诉我确切的问题吗?我知道初始化后我们无法更改静态最终变量的值。那么@Value注释的用途是什么。
如果可以通过其他方法完成,那么您也可以向我展示。
提前致谢。
注解本质上是静态的,因此您不能以这种方式这样做。
@Value不能在static字段上使用,但这无关紧要-真正的问题是,除了编译时间常数作为注释的属性外,没有其他方法可以使用值。
您可以使用以下替代方法之一:
添加URL重写过滤器(例如this或this)并将其配置为执行必要的转换。
由于职责分工明确,这种方法看起来更优雅-控制器负责完成工作,重写过滤器负责URL的混淆。
RequestMappingHandlerMapping. getMappingForMethod()在此步骤中通过覆盖并更改其URL模式来拦截控制器映射的创建(未测试)
| 归档时间: |
|
| 查看次数: |
16471 次 |
| 最近记录: |