Quarkus+Apache Camel实现404错误消息动态参数填充
解决方案
用Java MessageFormat 适配你的占位符配置
你的配置用了%1这种索引式占位符,正好对应Java MessageFormat的语法,直接用它填充参数最贴合需求:
import java.text.MessageFormat; import org.eclipse.microprofile.config.ConfigProvider; // 从配置中读取错误消息模板 String errorTemplate = ConfigProvider.getConfig().getValue("error.message.404", String.class); // 从请求中获取手机号参数 String phoneNumber = exchange.getIn().getHeader("phone", String.class); // 填充占位符生成最终错误消息 String errorMessage = MessageFormat.format(errorTemplate, phoneNumber);
在Apache Camel路由中整合的示例
把逻辑放到Camel的处理器里,同时设置HTTP响应状态码:
from("rest:get:/user/{phone}") .process(exchange -> { String phone = exchange.getIn().getHeader("phone", String.class); // 这里替换成你判断手机号是否存在的业务逻辑 if (!checkPhoneExists(phone)) { String template = ConfigProvider.getConfig().getValue("error.message.404", String.class); String formattedMsg = MessageFormat.format(template, phone); // 设置响应体和404状态码 exchange.getIn().setBody(formattedMsg); exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 404); } });
备选方案:改用String.format(需调整配置)
如果更习惯用%s这类占位符,可以先修改application.properties:
error.message.404=Resource %s does not exist
然后用String.format格式化:
String errorMessage = String.format(errorTemplate, phoneNumber);
关键提示
- 保持配置占位符和格式化工具的语法一致,避免出现填充失败的情况。
- 一定要设置
Exchange.HTTP_RESPONSE_CODE头,否则客户端无法收到正确的404状态码,只会拿到默认的成功状态。
内容的提问来源于stack exchange,提问作者Cesar Justo
相关产品推荐
相关产品推荐

