spring path变量中的等号和分号

z0qdvdin  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(334)

我有一个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变量并捕获完整的字符串?
rbl8hiat

rbl8hiat1#

; (以及 = )是一个特殊字符,在将url发送到服务器之前必须对其进行编码。编码后,url变为: {host}//xyz%3D123%3Bxyz spring提供了实用类 UriUtils 用于编码/解码操作。因此,如果您在服务器端编写url,您可以使用 UriUtils.encodePath() 方法以确保对路径中的所有特殊字符进行编码。

相关问题