我有一个Spring启动应用程序,我有一个API,其他URL作为路径参数。例如:
host:port/{eid}
是我的基本路径,之后我可以使用
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对网址中的斜杠(/)进行编码。这对我来说不是一个选择。
答案 0 :(得分:0)
如果你使用jsp或其他东西,为什么不尝试使用@RequestParam来获取url ..
@PathVariable意味着应该从调用的URL的路径中提取带注释的方法参数。 @RequestParam意味着必须从请求参数中提取带注释的方法参数。这些注释都不会导致带注释的参数被放入请求,会话或应用程序范围。
所以你也使用你的地图......
$ {username}表示“在响应中写入用户名属性的值(在页面中找到,或者在请求,会话或应用程序范围中找到)”。由于您没有在任何这些范围中包含任何用户名属性,因此它不会写任何内容。
如果方法返回了ModelAndView对象,并且模型包含username属性和studentid属性,则代码将起作用。
答案 1 :(得分:0)
您可以参考以下代码和链接:
第一个URL:localhost:8080 / projectName / test?firstname = john
第二个网址:localhost:8080 / projectName / test?firstname = john&amp; 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)
}
}
答案 2 :(得分:0)
所以我不确定是否有直接的弹簧实现,但是,你可以把我们混合在一起。
?
之后)eid
HttpServletRequest - 使用请求返回URI并剥离host:port / {eid}以及之后的任何内容? ,然后使用Arrays.asList(str.split(&#34; /&#34;)); (记住这是使用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) {
......
}
答案 3 :(得分:0)
我知道查询过旧,但仍然有用,此答案可以帮助其他人。 您可以使用request属性获取完整的url部分,如下所示。
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.4" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.1" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewItems"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toTopOf="@+id/guideline3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline2" />
</androidx.constraintlayout.widget.ConstraintLayout>