讲师中心 微信公众号
AI工具推荐 视频效率加速

Quarkus 中使用 JAX-RS 客户端实现可变长度路径参数的正确方法

胖静君_3543

胖静君_3543

发布时间:2026-01-25 11:32:02

|

375人浏览过

|

来源于php中文网

原创

Quarkus 中使用 JAX-RS 客户端实现可变长度路径参数的正确方法

在 quarkus 的 microprofile rest client 中,若需向服务端发送含多级斜杠(如 `/employees/dwight/jobs/...`)的动态路径,直接传入含 `/` 的字符串会被自动 url 编码;正确解法是结合 `@path` 正则表达式与 `@pathparam`,允许匹配任意长度路径段。

在 JAX-RS(以及 Quarkus 所基于的 RESTEasy 实现)中,路径参数默认对 / 字符敏感——它被视为路径分隔符,而非普通字符。当你尝试将类似 "employees/Dwight/jobs/assistantRegionalManager/salary" 作为 @PathParam 传入时,JAX-RS 会将其按 / 拆分并尝试匹配多个路径段,导致 404 或编码异常(如转为 %2F),即使添加 @Encoded 或正则 {var: .*} 也常因写法不严谨而失效。

✅ 正确做法是:在 @Path 中使用支持贪婪匹配的正则表达式 .+,并确保路径变量名与注解一致:

@Path("/json")
@RegisterRestClient(configKey = "json-api")
public interface JsonService {

    @GET
    @Path("/{varPath:.+}") // ← 关键:冒号后紧跟正则,且必须用 .+(非 .*),支持跨 / 匹配
    Response getJson(@PathParam("varPath") String endpoint);
}
? 说明: {varPath:.+} 表示“匹配一个或多个任意字符(包括 /)”,且该匹配会吞掉整个后续路径段,直到 URL 结尾或下一个查询参数前为止; 使用 .+ 而非 .* 更安全:.* 在部分实现中可能匹配空字符串,引发歧义; @PathParam("varPath") 中的名称必须与路径模板中 {varPath:...} 的变量名完全一致(区分大小写); 无需 @Encoded —— 因为匹配发生在服务器路由解析阶段,客户端传入的原始字符串将原样注入路径,不经过二次编码。

✅ 调用示例:

chartjs-reporter
chartjs-reporter

此技能用于在用户需要将结构化数据(查询结果、CSV 摘要、JSON 记录或 Python 字典/列表)转换为独立的 HTML 页面时使用。

下载
@Inject
@RestClient
JsonService jsonService;

// 自动映射为 GET /json/employees/Dwight/jobs/assistantRegionalManager/salary
Response res1 = jsonService.getJson("employees/Dwight/jobs/assistantRegionalManager/salary");

// 自动映射为 GET /json/games/theLastOfUs/rating
Response res2 = jsonService.getJson("games/theLastOfUs/rating");

⚠️ 注意事项:

  • 确保服务端对应资源路径(如 /json/{varPath:.+})已正确定义并能处理该动态路径;
  • 若路径中可能包含查询参数(如 /json/data?format=json),当前方案不适用——{varPath:.+} 不会捕获 ? 后内容,需改用 @QueryParam 分离处理;
  • 在 Quarkus 2.13+ 中已全面兼容该语法;旧版本建议升级至 LTS 版本(如 2.16+ 或 3.x)以获得稳定支持。

总结:可变长路径的本质不是“绕过编码”,而是让 JAX-RS 路由引擎主动接纳 / 作为路径变量的一部分。通过 @Path("/{var:.+}") + @PathParam 的组合,既符合规范,又零侵入、无额外依赖,是 Quarkus 微服务间动态资源调用的标准实践。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2195

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3462

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1156

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3999

2025.09.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4596

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

3081

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

8562

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

812

2023.08.11

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.2万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn