如何访问Spring中类级别指定的控制器的PathVariable?

我可以用Spring MVC做这样的事情吗?

@RequestMapping(value = "/{root}") public abstract class MyBaseController { @PathVariable(value = "root") protected ThreadLocal root; } @Controller public class MyController extends MyBaseController { @RequestMapping(value = "/sayHello") @ResponseBody public String hello() { return "Hello to " + this.root.get(); } } 

当我请求http://..../roberto/sayHello ,我得到这个作为回应:

 Hello to roberto 

未经测试,但你可能会成功地搞乱HandlerMappingHttpServletRequest ,它是一个代理bean,可以用作实例字段

 @Controller @RequestMapping("/user/{username}") public class UsersController { @Autowired HttpServletRequest req; @RequestMapping("/greet") public String greet() { return "Hello, " + username(); } private String username() { Map variables = (Map) req.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); return variables.get("username"); } } 

你可以像这样编码:

 @RequestMapping("/home/{root}/") public class MyController{ @RequestMapping("hello") public String sayHello(@PathVariable(value = "root") String root, HttpServletResponse resp) throws IOException { String msg= "Hello to " + root; resp.setContentType("text/html;charset=utf-8"); resp.setCharacterEncoding("UTF-8"); PrintWriter out = resp.getWriter(); out.println(msg); out.flush(); out.close(); return null; } } 

结果如下: 在此处输入图像描述

并且,您可以使用ModelAndViewmsg值返回到jsp或其他html页面。

根据文件:

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/PathVariable.html

PathVariable注释本身用@Target(value=PARAMETER)注释,因此它不应该像你说的那样使用,因为它只适用于方法参数。