我有一个Spring启动应用程序,我有一个API,其他URL作为路径参数。例如:
host:port/{eid}
是我的基本路径,在此之后我可以拥有像这样的URL
host:port/{eid}/abc
host:port/{eid}/abc/pqr/
host:port/{eid}/abc/pqr/b=2
host:port/{eid}/abc/pqr/xyz
host:port/{eid}/abc/pqr/xyz?a=1
...等等...
我想定义一个控制器,我可以映射到所有上面的URL,这应该是类似的工作
@RequestMapping(value = "/{eid}/{urlParts}", method = RequestMethod.GET)
public ResponseEntity<Object> share(
@PathVariable String eid,
@PathVariable String urlParts) {
......
}
我尝试使用@PathVariable Map<String, String> path
和@RequestMapping(value = "/{eid}/{urlParts:.+}"
但无法获得预期的结果。
是否有任何解决方案在路径参数中接收路径斜杠(/)。
注意:我无法对URL中的斜杠(/)进行URL编码。那对我来说不是一个选择。
如果你使用jsp或其他东西,为什么不尝试使用@RequestParam来获取url ..
@PathVariable意味着应该从调用的URL的路径中提取带注释的方法参数。 @RequestParam意味着必须从请求参数中提取带注释的方法参数。这些注释都不会导致带注释的参数被放入请求,会话或应用程序范围中。
所以你也用你的地图......
$ {username}表示“在响应中写入用户名属性的值(在页面中找到,或者在请求,会话或应用程序范围中找到)”。由于您没有在任何这些范围中包含任何用户名属性,因此它不会写任何内容。
如果方法返回ModelAndView对象,并且模型包含username属性和studentid属性,则代码将起作用。
你可以参考下面的代码和链接:
第一个URL:localhost:8080 / projectName / test?firstname = john
第二个URL:localhost:8080 / projectName / test?firstname = john&secondname = roy
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping(value = { "/test/{firstname}/test" }, method = { RequestMethod.GET })
public String someMethod(@PathVariable("firstname") String firstname){
return someMethod(firstValue )
}
@RequestMapping(value = { "/test/{firstname}/{otherString}/test" }, method = { RequestMethod.GET })
public String someOtherMethod(@PathVariable("firstname") String firstname, @PathVariable("secondname") String secondValue) {
return someMethod(firstValue + "/" + secondValue)
}
}
所以我不确定是否有直接的弹簧实现,但是,你可以把我们混合在一起。
?
之后)eid
new ArrayList<Sting>(Arrays.asList(str.split("/")))
的数组的包装器)
@RequestMapping(value = "/{eid}", method = RequestMethod.GET)
public ResponseEntity<Object> share(
@PathVariable String eid,
@RequestParam Map<String,String> allRequestParams,
HttpServletRequest request) {
......
}
我知道查询太旧但仍然有用,这个答案可以帮助其他人。您可以使用请求属性获取完整的网址部分,如下所示。
@RequestMapping(value = "/{eid}/**", method = RequestMethod.GET)
public ResponseEntity<Object> share(@PathVariable String eid, HttpServletRequest request) {
Object uriObject = request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
if (null != uriObject) {
String urlParts = uriObject.toString().replaceFirst("^/" eid + "/", "");
}
....
}