我正在使用Spring 4.0编写一个Web应用程序。
我已经用我认为使用@RequestMapping
注释定义控制器处理的url模式的正常方式编写了我的控制器。
下面的代码段为控制器显示了这一点,该控制器显示了一个推荐......
@Controller
@RequestMapping("/testimonialView")
public class TestimonialRequestController {
@RequestMapping(value="/{testimonialName}", method=RequestMethod.GET)
public ModelAndView testimonialRequest(@PathVariable String testimonialName, ModelAndView modelAndView) throws FileNotFoundException {
Testimonial testimonial;
. . .
}
}
在我的应用程序的其他地方,我想生成一个链接栏,其中包含要包含在左手导航中的所有推荐。
目前,当我构建锚元素的href进入链接栏时,我正在硬编码网址,如下所示:
String href="/testimonialView/" + testimonialName;
这似乎不对。如果以后我想更改网址结构,我必须至少在两个地方更改它 - 可能更多。一旦传入的URL与控制器匹配,一次构建一个用户将单击以调用该URL的锚元素。
是否有处理此问题的最佳做法?它必须是一个普通的。是否像使用常量来表示URL并从不同的位置访问这些URL一样简单?我知道我的例子很简单,但我认为对于具有复杂URL结构的更大的Web应用程序必须存在问题,所以我想了解最佳实践是什么。
我希望这不是一个愚蠢的问题。我很想确保从一开始就实施最佳实践。我查看了Stackoverflow和Google,但没有完全回答这个具体问题。
感激不尽的任何帮助。
答案 0 :(得分:2)
简短的回答是你不能动态地这样做,因为@RequestMapping在编译时将数据放入代码中。
然而,有几个选项可行。
我的推荐是
public class URLs {
public static final String TESTIMONIAL_VIEW = "/testimonialView";
}
与
@RequestMapping(URLs.TESTIMONIAL_VIEW)
和
String href= URLs.TESTIMONIAL_VIEW + "/" + testimonialName;
答案 1 :(得分:1)
对于这种事情,没有更好的做法。正如阿什利所说,你能做的最多就是使用常数。但与任何其他客户端 - 服务器情况(如Web)一样,如果更改合同(本例中为url),则必须为客户端(即链接)和服务器(控制器)执行此操作。映射)。
我还要提到你的控制器可以更通用,例如有一个" Testimonials"控制器和"查看/ {名称}"作为该控制器内的动作。 希望这有帮助