我有一个标有Spring @RequestMapping
的方法,其中包含HttpServletRequest
方法参数。
如果我在路径是“request.getServletPath()
”时打印出“/things/{thingId}
”的调用结果,我会得到“/things/2489sdfjk43298f
”,其中{{thingId}
1}} path参数已替换为实际值。
我想打印出文字请求路径“/things/{thingId}
”;即使用花括号,未替换的路径参数“{thingId}
。”
这有可能吗?
编辑:在看完Sotirios下面的第二条评论后,我意识到我可能会向后看问题。这就是我实际上要做的......
我正在尝试在“/**
”下创建一个端点,该端点从HttpServletRequest
获取路径,我用它来查找enum
中的值。这个enum
有几个字段,其中一个显然是前面提到的路径,另一个是目标JSP文件的路径。然后我将此路径放入ModelAndView
对象并返回以显示页面。
在我用路径参数命中第一个端点之前,这很好,因为我显然无法将值“/things/2489sdfjk43298f
”放入枚举中,因为那只会匹配那个特定的{{ 1}}有一个特定的ID。
所以也许实际的问题是:当路径的某些部分由于路径参数而改变时,我该如何查找?我可以使用某种含通配符的thing
格式吗?
我想这会变成更多的String
- 查找/ enum
匹配问题。我的坏。
编辑2:我正在谈论的String
事情的简短示例:
enum
我的终点的简短示例:
public enum JspEndpointType {
HOME("/home", "jsp/home");
private static final Map<String, String> pathMap;
private String requestPath;
private String jspPath;
static {
pathMap = new HashMap<>();
for (JspEndpointType jspEndpointType : JspEndpointType.values()) {
pathMap.put(jspEndpointType.getRequestPath(), jspEndpointType.getJspPath());
}
}
private JspEndpointValue(String requestPath, String jspPath) {
this.requestPath = requestPath;
this.jspPath = jspPath;
}
public String getRequestPath() {
return requestPath;
}
public String getJspPath() {
return jspPath;
}
public static String getByRequestPath(String requestPath) {
return pathMap.get(requestPath);
}
}
所以事情基本上归结为尝试添加@RequestMapping(value = "/**", method = RequestMethod.GET)
public ModelAndView showPage(HttpServletRequest request) {
return new ModelAndView(JspEndpointType.getByRequestPath(request.getServletPath()));
}
这样的值:
enum
..然后能够传递路径“THINGS("/things/{thingId}", "jsp/things/whatever")
”并返回“/things/2489sdfjk43298f
。”
编辑3:我找到了this StackoverFlow question,它指示我使用Spring的UriComponentsBuilder,特别是“/jsp/things/whatever
”方法。然而,这似乎与我正在尝试做的相反......
答案 0 :(得分:0)
您可以使用反射自行查找@RequestMapping
注释。