当前位置: 首页 > 知识库问答 >
问题:

openapi生成器cli生成的服务不可注入

劳法
2023-03-14

我试图生成一个API客户端从v2 swagger文件openapi生成器cli。为此,我使用openapi生成器cli的docker容器,它将其版本报告为4.1.0-SNAPSHOT。

代码生成使用以下选项:

{
    "npmName": "...",
    "npmVersion": "0.0.3",
    "snapshot": true,
    "ngVersion": "8.1.1"
}

我还尝试将提供的InRoot选项设置为true。

但是,生成的服务类不使用@Inject table装饰器进行注释。因此,在我的组件中导入它们并在组件的构造函数中添加服务后,我无法使用它们。这就是我的组件的样子:

import { Component, OnInit } from '@angular/core';

import { UsersService, User } from '...'

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  constructor(userService: UsersService) {}

  title = 'user-frontend';

  ngOnInit() {
    this.userService.listUsers();
  }

}

失败,因为userService不在AppComponent的作用域中。

这是我如何导入生成的模块:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';

import { ApiModule } from '...';
import { HttpClientModule } from '@angular/common/http';


@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    ApiModule,
    HttpClientModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

在生成api客户端时,我的错误在哪里?

编辑:生成的代码如下:

@Injectable({
  providedIn: 'root'
})
export class UsersService {

    protected basePath = 'http://localhost';
    public defaultHeaders = new HttpHeaders();
    public configuration = new Configuration();
    public encoder: HttpParameterCodec;

    constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {

        if (configuration) {
            this.configuration = configuration;
            this.configuration.basePath = configuration.basePath || basePath || this.basePath;

        } else {
            this.configuration.basePath = basePath || this.basePath;
        }
        this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
    }

...
}

共有1个答案

司马俊晖
2023-03-14

许多问题从“…”导入{apimule};生成的代码来自哪里?您是将其发布到npm并使用它,还是只是复制粘贴生成的代码?试试这个

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    ApiModule.forRoot(() => {
      return new Configuration({
        basePath: `${environment.HOST}:${environment.PORT}`,
      });
    }),,
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

您生成的代码应该是这样的

@Injectable({
  providedIn: 'root'
})
export class PetsService {

    protected basePath = 'http://localhost';
    public defaultHeaders = new HttpHeaders();
    public configuration = new Configuration();

    constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {

        if (configuration) {
            this.configuration = configuration;
            this.configuration.basePath = configuration.basePath || basePath || this.basePath;

        } else {
            this.configuration.basePath = basePath || this.basePath;
        }
    }

解决方案:在构造函数中使用私有或公共

说明:这里我们有和你一样的问题打字稿不知道你想要什么

class TestClass {
  constructor(name: string) {
  }
}

这里我们有最后一个普通POO promamming语言的例子

class TestClass {
  private name: string;

  constructor(name: string) {
    this.name = name;
  }
}

但是打字稿给了我们一个简单的方法来减少代码

class TestClass {
  constructor(private name: string) { }
}
 类似资料:
  • 我正在维护一个Java应用程序,我们在其中不断添加新特性(api中的更改)。我想使用OpenAPI作为记录api的一种方式。我看到两种思想流派: 编写代码,使用一些注释来生成OpenAPI规范。 虽然两者看起来都很好,但服务器代码只是简单地存档了,然后需要大量的手动插入服务。虽然这似乎罚款作为一个一次性成本,然后下次我更新界面,它似乎对我来说唯一的两个选项是 再次生成它们,重新执行所有手动接线 手

  • 我使用的是默认配置,但由于某种原因,我一直收到以下错误: 任务“Generate OpenApidocs”执行失败。无法连接到http://localhost:8080/v3/api-文档等待了30秒 似乎由于某种原因,它没有设置服务器。我该怎么修好它?

  • 我正在使用openapi生成器maven插件的4.3.1版本在Java11中生成SpringBoot服务器。 对于PUT请求,我希望能够在成功时将URI返回到创建/更新的对象,并且在不成功时返回带有问题信息的纯文本。 我的API的json对于PUT请求有以下内容: 生成的API: 然而,该方法的返回类型是

  • 当使用带有Gradle的OpenAPI生成器时,我希望将性别化的源发送到其他源生成器插件使用的标准目录。类似于Maven生成源的东西。 到目前为止,我还不能这样做,特别是将生成限制为Java源类,而不是整个“原型项目”。 似乎OpenAPI Gradle插件的工作流程与Maven插件的工作流程并不相同。 是否有配置标志来省略所有非java代码的生成,并在“生成的源代码”文件夹(如/out/prod

  • 我在从服务器构建时遇到问题。我的项目是一个使用Netbeans IDE的Android应用程序。当我运行我的应用程序时,一切正常,编译器完全不报告任何错误。但是当我向服务器发送build Netbeans时,我会报告一个成功的构建,但是当我登录到构建服务器时,我看到的是一个构建失败并带有错误日志。 以下是我从生成服务器获得的错误日志: 构建失败/home/ec2 user/android sdk/

  • 我正在使用openapi生成器生成服务器存根python代码。一切正常,但是,每次我修改OpenAPI规范(yaml文件),代码生成器都会覆盖整个代码,甚至是定制的代码(控制器)。我想开发一个增量工作流,如果我对规范进行了更改,生成器将只修改处理该部分代码的代码。 如果我能够执行规范并拥有一个增量工作流,那就太好了。 我使用的是openapi生成器版本3.3。4. 我试图修改控制器并删除,但每次我