我有一个控制器方法如下
@RequestMapping(value = "/{fruitName:Mango|Orange|Grapes}", method = RequestMethod.GET)
public String viewFruit(ModelMap model, @PathVariable String fruitName) {
...
}
我在这里硬编码 Mango,Orange和Grapes ,这样如果url与其中任何一个匹配,那么只有这个方法才能执行。
我想做的是,而不是在这里对这些成果进行硬编码。我想在属性文件中声明它们并使用SPEL,我应该把它带到这里。
这可能吗?
我为此尝试了以下代码,但因错误而失败:
@RequestMapping(value = "/{fruitName:#{fruit['seasonFruit.requestMapping']}}", method = RequestMethod.GET)
public String viewFruit(ModelMap model, @PathVariable String fruitName) {
...
}
对于以下属性文件( fruit.properties )
seasonFruit.requestMapping = Mango|Orange|Grapes
请建议,如何实现这一目标?
答案 0 :(得分:3)
@ArtemBilan那么,我们有什么方法可以实现这一目标吗?通过分离硬编码
好吧,我希望你能从代码中做到这一点:
@Value("#{ environment['seasonFruit.requestMapping'] }")
private String fruitName;
@RequestMapping(value = "/{fruitName:[a-z]", method = RequestMethod.GET)
public String viewFruit(ModelMap model, @PathVariable String fruitName) {
if (fruitName.matches(this.fruitName))
}
答案 1 :(得分:1)
您可能无法直接在requestMapping中使用REGEX和从属性文件加载的值的组合。但我能够在一个示例应用程序中实现。本质上我是从属性文件中解析整个正则表达式模式,而不仅仅是它的值。 RequestMapping可以解析属性文件中的值。希望这有帮助。
属性文件
sample.test={url:mango|orange}
控制器方法:
@RequestMapping(value = { "/example/${sample.test}" }, method = RequestMethod.GET)
public String testPattern(@PathVariable String url) {
System.out.println("url:" + url);
return sample;
}