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

Mirth v3.12.0中如何动态设置HTTP响应状态码?

问题描述

我正在使用Mirth v3.12.0,配置了一个HTTP监听器通道源,从查询字符串读取参数后生成查询语句,从数据库获取数据。目前能正常访问数据库并读取所有数据:在Channel Writer类型的目的地中,通过转换器脚本将所有信息封装为JSON,再通过responseMap输出消息。

当遇到错误请求时,我可以生成对应的错误JSON,但无法将默认HTTP状态码从200动态改为400。我尝试过在目的地转换脚本中写入以下代码:

responseStatusCode = '400';
channelMap.put('responseStatusCode', responseStatusCode);

并在源页面的「Response Status Code」框中填写$(responseStatusCode),但没有效果。

解决方案

问题出在通道执行顺序和变量作用时机上:源的HTTP响应配置会在目的地处理前就确定,因此目的地转换器中设置的channelMap变量无法被源的响应配置读取到。可以通过以下两种方式解决:

方法一:在源的Transformer中提前判断并设置状态码

如果错误请求可以在源处理阶段(读取查询参数时)就识别出来,直接在源的Transformer中添加判断逻辑:

// 示例:判断查询参数是否缺失或非法
var invalidRequest = false;
var param = $('queryParam'); // 替换为你的实际查询参数变量
if (param == null || param === '') {
    invalidRequest = true;
}

if (invalidRequest) {
    // 设置响应状态码为400(数字类型,不要加引号)
    responseStatusCode = 400;
    channelMap.put('responseStatusCode', responseStatusCode);
    // 同时生成错误JSON
    var errorJson = JSON.stringify({"error": "非法请求,参数缺失"});
    responseMap.put('response', errorJson);
}

然后保持源页面的「Response Status Code」框填写$(responseStatusCode)即可。

方法二:在Error Handler中设置错误状态码

如果错误是在目的地处理阶段(数据库查询、JSON封装)才出现的,需要在通道的Error Handler中配置:

  1. 打开通道的「Error Handler」标签页;
  2. 添加一个「Script」类型的步骤,写入以下代码:
// 设置响应状态码为400
responseStatusCode = 400;
channelMap.put('responseStatusCode', responseStatusCode);
// 生成错误响应内容
var errorResponse = JSON.stringify({"error": "请求处理失败"});
responseMap.put('response', errorResponse);
  1. 确保源页面的「Response Status Code」框填写$(responseStatusCode)。

关键注意点

  • responseStatusCode必须是数字类型,不要用字符串(即写400而非'400');
  • HTTP响应的状态码由源组件负责返回,因此变量需要在源处理阶段或错误处理阶段提前设置,才能被源的响应配置读取到。

内容的提问来源于stack exchange,提问作者Patrick Palmerini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:46:05