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中配置:
- 打开通道的「Error Handler」标签页;
- 添加一个「Script」类型的步骤,写入以下代码:
// 设置响应状态码为400 responseStatusCode = 400; channelMap.put('responseStatusCode', responseStatusCode); // 生成错误响应内容 var errorResponse = JSON.stringify({"error": "请求处理失败"}); responseMap.put('response', errorResponse);
- 确保源页面的「Response Status Code」框填写
$(responseStatusCode)。
关键注意点
responseStatusCode必须是数字类型,不要用字符串(即写400而非'400');- HTTP响应的状态码由源组件负责返回,因此变量需要在源处理阶段或错误处理阶段提前设置,才能被源的响应配置读取到。
内容的提问来源于stack exchange,提问作者Patrick Palmerini
相关产品推荐
相关产品推荐

