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

NSwag生成Angular 5 API服务后如何获取JSON响应?

问题分析与解决办法

嘿,我一眼就瞅出问题根源啦——NSwag生成的服务代码里,压根没把服务器返回的JSON数据解析并返回!

看你贴的NSwag生成的代码片段,当接口返回200状态码时,它处理完响应文本后直接返回了Observable.of<void>(<any>null),这就是为啥你订阅的时候始终拿到null的原因!

具体问题点

这段生成的代码是罪魁祸首:

if (status === 200) {
  return blobToText(responseBlob).flatMap(_responseText => {
    return Observable.of<void>(<any>null); // 这里直接返回了null,完全没处理响应数据
  });
}

解决步骤

1. 临时修复:手动修改生成的服务代码

找到生成的processApiSubmissionGetResultMessageGet方法,把返回null的逻辑改成解析响应文本为你的数据模型:

// 假设你的接口返回的是SubmissionDocument类型(根据实际情况替换)
if (status === 200) {
  return blobToText(responseBlob).flatMap(_responseText => {
    const responseData = JSON.parse(_responseText) as SubmissionDocument;
    return Observable.of(responseData); // 返回解析后的真实数据
  });
}

同时要把方法的返回类型从Observable<void>改成Observable<SubmissionDocument>(对应你的实际数据类型)。

2. 永久解决:调整NSwagStudio配置避免重复手动修改

你肯定不想每次重新生成代码都改一遍,所以要在NSwagStudio里调整生成配置:

  • 先确保你的Swagger/OpenAPI文档里,这个接口的responses.200.schema正确定义了返回数据的模型(不是空或者void类型)。
  • 在NSwagStudio的Angular生成选项里:
    • 勾选「Generate DTOs」,让NSwag自动生成对应的数据模型类。
    • 检查「Response Type」相关设置,确保它识别到接口的返回类型,而不是默认生成void类型的返回Observable。

3. 验证你的订阅代码

修改完服务后,你的订阅逻辑就能正常拿到数据了:

getSubmissionDetails(documentId: string): void {
  this.client.apiSubmissionGetSubmissionDocumentGet(documentId)
    .subscribe(
      data => {
        this.submissionList = data; // 现在可以正确赋值了
        console.log('data: ', data);
      },
      (error: any) => this.errorMessage = error
    );
}

额外提示

如果不确定接口返回的数据模型,可以先在浏览器开发者工具的「Network」标签里查看该接口的响应内容,确认JSON结构后,要么手动创建对应的TypeScript接口,要么让NSwag从Swagger文档自动生成DTO类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:54