是否可以在带注释的方法中引用@RequestMapping值?

时间:2015-11-13 16:47:21

标签: java spring-mvc

给出一个方法:

@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获取值,但不确定是否有更好的方式。

2 个答案:

答案 0 :(得分:1)

解决方案1 ​​

使用HttpServletRequest

@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

使用@PathVariable

 @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和数据库中页面名称之间的映射。