You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:02:07