Postman请求中如何正确传入UUID类型的路径变量id?
UUID类型路径参数传参400问题解决
问题复现场景
接口定义如下:
@RequestMapping(method = RequestMethod.GET, path = "/{id}", produces = "application/json") public ResponseEntity<T> getId(@PathVariable("id") final UUID id) { }
Postman调试时,传入纯UUID字符串4df34f48-33ce-4da2-8eba-a682e2d1e698、带大括号包裹的{4df34f48-33ce-4da2-8eba-a682e2d1e698}均返回400 Bad Request。
核心原因
- Spring内置UUID转换器默认仅识别标准无修饰UUID字符串,即格式为
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx的纯字符串,带大括号、带urn:uuid:前缀的格式会直接触发类型转换失败。 - Postman传参时路径拼接错误是最高发的诱因:
- 未正确替换URL中的
{id}占位符,比如把参数写到Query参数区(?id=xxx格式),@PathVariable不会读取Query区参数,会直接报路径不匹配。 - 手动给参数值加了多余的引号、转义符,或者路径多写/少写斜杠,导致路径匹配失败。
- 未正确替换URL中的
- 项目自定义MVC转换器、拦截器篡改了路径参数,或使用的Spring版本存在UUID转换已知bug,也会触发该问题。
正确操作步骤
- 直接拼接URL时,去掉所有多余修饰,把UUID值直接替换路径中的
{id}占位即可,示例:
不要保留占位符的大括号,不要给UUID加引号、括号等额外符号。http://localhost:8080/你的接口前缀/4df34f48-33ce-4da2-8eba-a682e2d1e698 - 使用Postman的Path Variables功能传参时,在Params面板的Path Variables分类下,给
id键填入不带任何修饰的纯UUID字符串,确保键名和URL里的占位符名称完全一致。 - 如果需要兼容带大括号的UUID传参格式,自定义String转UUID的转换器注册到Spring容器即可,参考代码:
@Component public class StringToUUIDConverter implements Converter<String, UUID> { @Override public UUID convert(String source) { if (source == null || source.isBlank()) return null; String uuid = source.trim(); if (uuid.startsWith("{") && uuid.endsWith("}")) { uuid = uuid.substring(1, uuid.length() - 1); } return UUID.fromString(uuid); } } - 上述操作无效时,排查自定义拦截器、过滤器是否修改了请求路径,升级Spring到稳定版本即可解决低版本兼容问题。
注意:
@PathVariable注解仅从URL路径段读取参数,不要把参数拼到URL的?后面作为查询参数传递。
内容的提问来源于stack exchange,提问作者readel
相关产品推荐
相关产品推荐

