我有一个rest控制器,路径如下: "//{variable}"
```
@GetMapping(produces = "application/json", value = "/abc/{variable}")
@ResponseStatus(HttpStatus.OK)
public List<String[]> controller(@PathVariable String variable) {
//code
}
我想传递带有多个分号和等号的字符串,请求如下:
{host}//xyz=123;xyz公司
得到完整的字符串 `xyz=123;xyz;` 在控制器方法的路径变量中。
我已将spring配置为不删除分号,如下所示:
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
但结果被截断为 `xyz=123` 在这个例子中(可能是因为矩阵变量在spring中的工作方式)。是否可以在spring中使用带有多个分号和等号的path变量并捕获完整的字符串?
1条答案
按热度按时间rbl8hiat1#
自
;
(以及=
)是一个特殊字符,在将url发送到服务器之前必须对其进行编码。编码后,url变为:{host}//xyz%3D123%3Bxyz
spring提供了实用类UriUtils
用于编码/解码操作。因此,如果您在服务器端编写url,您可以使用UriUtils.encodePath()
方法以确保对路径中的所有特殊字符进行编码。