使用Perl的Mojolicious调用REST服务时无法解析响应体哈希值
问题分析与解决
你的核心问题是没有解析REST接口返回的JSON响应体,只是打印了原始响应内容,导致$RequestID变量无法获取对应值。另外代码存在冗余模块和不够优雅的写法,以下是修正方案:
原代码的主要问题
- 导入了不必要的模块(
Mojo::Message::Response、Mojo::Promise、Mojo::Content::MultiPart),增加代码冗余 - 手动拼接URL易出错且不够简洁
- 未对返回的JSON响应做解析,无法提取
RequestID等字段
修正后的代码
use Mojo::UserAgent; # 用Mojo::URL优雅构建请求URL my $url = Mojo::URL->new('http://localhost:31297/api/CallBack/RegisterCallBackURL') ->query({ CallBackURL => 'http://localhost:8081/status', VerboseFlag => 'false', 'api-version' => '1.2' }); my $ua = Mojo::UserAgent->new; my $tx = $ua->post($url); my $res = $tx->result; if ($res->is_success) { print "success\n"; print $res->message . "\n"; # 解析JSON响应为哈希引用 my $response_data = $res->json; # 提取RequestID并赋值给变量 my $RequestID = $response_data->{RequestID}; # 打印完整响应数据和提取的RequestID print "响应内容: " . $res->body . "\n"; print "提取的RequestID: $RequestID\n"; } else { print "Error\n"; print $res->message . "\n"; }
关键修正点说明
- 简化URL构建:使用
Mojo::URL的query方法自动拼接查询参数,避免手动拼接时的格式错误 - 移除冗余模块:仅保留
Mojo::UserAgent,它已集成JSON解析功能,无需额外导入Mojo::JSON - 解析JSON响应:调用
$res->json()方法将响应体直接转换为Perl哈希引用,方便提取字段 - 提取RequestID:从解析后的哈希中直接获取
RequestID字段值,赋值给变量使用
运行修正后的代码,$RequestID就能成功获取到接口返回的UUID值。
内容的提问来源于stack exchange,提问作者Martin R. Smith
相关产品推荐
相关产品推荐

