给出一个方法:
@RequestMapping(value = {"/foo"}, method = RequestMethod.GET)
public String getMappingValueInMethod() {
log.debug("requested "+foo); //how can I make this refer to /foo programmatically?
return "bar";
}
用例用于重构一些长度代码。我有几个GET方法做大致相同的事情,只有请求映射值不同。
我已经看过使用路径变量,但这并不是我想要的(除非我有一些巧妙的使用它,我不明白)。我也可以从this post中的HttpServletRequest
获取值,但不确定是否有更好的方式。
答案 0 :(得分:1)
解决方案1
@RequestMapping(value = "/foo", method = RequestMethod.GET)
public String fooMethod(HttpServletRequest request) {
String path = request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE).toString();
System.out.println("path foo: " + path);
return "bar";
}
解决方案2
使用reflection。
@RequestMapping(value = "/foo2", method = RequestMethod.GET)
public String fooMethod2() {
try {
Method m = YourClassController.class.getMethod("fooMethod2");
String path = m.getAnnotation(RequestMapping.class).value()[0];
System.out.println("foo2 path: " + path);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return "bar";
}
如果你想从类(而不是方法)获取路径,你可以使用:
String path = YourClassController.class.getAnnotation(RequestMapping.class).value();
解决方案3
@RequestMapping(value = {"/{foo3}"}, method = RequestMethod.GET)
public @ResponseBody String fooMethod3(@PathVariable("foo3") String path) {
path = "/" + path; // if you need "/"
System.out.println("foo3 path: " + path);
return "bar";
}
答案 1 :(得分:0)
最简单的方法是将数组直接放在请求映射中我假设这是你想要的。
@RequestMapping(value = {"/foo","/foo1","/foo2"}, method = RequestMethod.GET)
public String getMappingValueInMethod(HttpServletRequest request) {
log.debug("requested "+request.getRequestURI());
return request.getRequestURI();
}
然后命名类似于uri的jsp文件,或者你可以存储请求uri和数据库中页面名称之间的映射。