Spring @RequestMapping 特殊字符的处理
Spring @RequestMapping handling of special characters
我有这样的 REST API:
@RequestMapping(value = "/services/produce/{_id}", method = RequestMethod.PATCH,
consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public String patchObject(@RequestBody PatchObjectRequest obj,
@PathVariable("_id") String id) {
// some code
}
我的问题是可能给出的 id 的格式为:
US%2FCA%2FSF%2FPlastic
这是 "US/CA/SF/Plastic" 的 URL 编码。
我的问题是,当一个 % 字符被放入 URL 时,@RequestMapping 不会将它映射到这个方法,它会 return 一个 404。有没有办法接受 id其中有 % 字符作为 URL?
的一部分
您收到此错误是因为将其用作已解码的路径变量,然后服务器尝试将其与不存在的路径匹配。几年前发布的类似问题:How to match a Spring @RequestMapping having a @pathVariable containing "/"?, urlencoded Forward slash is breaking URL.
一个不错的选择是将 _id
从 @PathVariable
更改为 @RequestParam
并解决问题,然后将其从路径中删除。
希望您可以在路径变量中添加正则表达式,例如:
@RequestMapping(value = "/services/produce/{_id:.+}",
method = RequestMethod.PATCH,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
我有这样的 REST API:
@RequestMapping(value = "/services/produce/{_id}", method = RequestMethod.PATCH,
consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public String patchObject(@RequestBody PatchObjectRequest obj,
@PathVariable("_id") String id) {
// some code
}
我的问题是可能给出的 id 的格式为:
US%2FCA%2FSF%2FPlastic
这是 "US/CA/SF/Plastic" 的 URL 编码。
我的问题是,当一个 % 字符被放入 URL 时,@RequestMapping 不会将它映射到这个方法,它会 return 一个 404。有没有办法接受 id其中有 % 字符作为 URL?
的一部分您收到此错误是因为将其用作已解码的路径变量,然后服务器尝试将其与不存在的路径匹配。几年前发布的类似问题:How to match a Spring @RequestMapping having a @pathVariable containing "/"?, urlencoded Forward slash is breaking URL.
一个不错的选择是将 _id
从 @PathVariable
更改为 @RequestParam
并解决问题,然后将其从路径中删除。
希望您可以在路径变量中添加正则表达式,例如:
@RequestMapping(value = "/services/produce/{_id:.+}",
method = RequestMethod.PATCH,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)