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

14

我能用Spring MVC做类似这样的事吗?

@RequestMapping(value = "/{root}")
public abstract class MyBaseController {

    @PathVariable(value = "root")
    protected ThreadLocal<String> 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

2
https://dev59.com/ZWAg5IYBdhLWcg3w9e4y - user2418306
3个回答

21

您可以在控制器URL前缀模板中使用路径变量,例如:

@RestController
@RequestMapping("/stackoverflow/questions/{id}/actions")
public class StackOverflowController {

    @GetMapping("print-id")
    public String printId(@PathVariable String id) {
        return id;
    }
}

当HTTP客户端发出以下请求时,可以这样:

GET /stackoverflow/questions/q123456/actions/print-id HTTP/1.1

{id} 占位符被解析为 q123456


10

你可以像这样编写代码:

@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;
    }
}

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

您可以使用ModelAndView返回msg值到jsp或其他HTML页面。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接