Angular4 and Swagger Client



也许有人可以帮忙。我尝试使用组件中的默认服务与REST API通信到后端python服务器。我尝试在angular中使用swagger codegen生成的ng2客户端。Python服务器也是由swagger生成的。服务器正在工作,

import { Inject, Injectable, Optional } from '@angular/core';
import { Http, Headers, URLSearchParams } from '@angular/http';
import { RequestMethod, RequestOptions, RequestOptionsArgs } from '@angular/http';
import { Response, ResponseContentType } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import '../rxjs-operators';
import { InlineResponseDefault } from '../model/inlineResponseDefault';
import { BASE_PATH, COLLECTION_FORMATS } from '../variables';
import { Configuration } from '../configuration';
import { CustomQueryEncoderHelper } from '../encoder';

@Injectable()
export class DefaultService {
protected basePath = 'http://127.0.0.1:8080/v1';
public defaultHeaders = new Headers();
public configuration = new Configuration();
constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {
if (basePath) {
this.basePath = basePath;
}
if (configuration) {
this.configuration = configuration;
this.basePath = basePath || configuration.basePath || this.basePath;
}
}
/**
* @param consumes string[] mime-types
* @return true: consumes contains 'multipart/form-data', false: otherwise
*/
private canConsumeForm(consumes: string[]): boolean {
const form = 'multipart/form-data';
for (let consume of consumes) {
if (form === consume) {
return true;
}
}
return false;
}

public isJsonMime(mime: string): boolean {
const jsonMime: RegExp = new RegExp('^(application/json|[^;/ t]+/[^;/ t]+[+]json)[ t]*(;.*)?$', 'i');
return mime != null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
}
/**
* Abort the programm in the project identified by UUID
* @param UUID The UUID
*/
public abortProject(UUID: string, extraHttpRequestParams?: RequestOptionsArgs): Observable<{}> {
return this.abortProjectWithHttpInfo(UUID, extraHttpRequestParams)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json() || {};
}
});
}
/**
* delete a single file at a specified path
* @param UUID The UUID
* @param path The path where to upload.
*/
public deleteFile(UUID: string, path: string, extraHttpRequestParams?: RequestOptionsArgs): Observable<{}> {
return this.deleteFileWithHttpInfo(UUID, path, extraHttpRequestParams)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json() || {};
}
});
}
/**
* Testing the connection
*/
public ping(extraHttpRequestParams?: RequestOptionsArgs): Observable<string> {
return this.pingWithHttpInfo(extraHttpRequestParams)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json() || {};
}
});
}

我的应用程序模块.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { AppComponent } from './app.component';
import { DefaultService } from './rest/api/default.service';

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

app.component.ts

我已经尝试在我的构造函数中注入default.service,之后浏览器会显示消息ERROR NO PROVIDER FOR HTTP Injection ERROR。。。。。我对ng和ts:-(完全是个新手。在它之后,我为控制台定义了一个函数getPing,记录服务器的答案。

import { Component, OnInit } from '@angular/core';
import { InlineResponseDefault } from '../app/rest';
import { HttpClient, } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { Response } from '@angular/http';
import { DefaultService } from './rest/api/default.service';
import { HttpClientModule } from '@angular/common/http';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})

export class AppComponent {
title = 'app';

constructor(private defaultService: DefaultService, public http: HttpClient) {
}
getPing() {
console.log(this.defaultService.ping);
}
}

在一个地方有Http,在另一个地方则有HttpClient。我强烈建议您阅读文档。我假设您打算使用HttpClient,但如果您想使用Http,请参阅其他文档。

default.service.ts中,更新构造函数以使用HttpClient:

constructor(protected http: HttpClient, ... other params ...)

应用程序组件.ts中:

  • 删除HttpClient构造函数参数:

    constructor(private defaultService: DefaultService) {}
    
  • 更新您的getPing()方法以实际调用默认服务上的ping()方法:

    console.log(this.defaultService.ping()); 
    

    如果没有(),它将返回一个函数引用,而不会调用该函数。

  • 删除HttpClientModule的导入。您只需要在app.module.ts文件中使用它。

你的app.module.ts很好。

事实上,我甚至不知道默认服务将如何编译,因为它似乎调用了一大堆方法。。。不存在。

正如我之前提到的,这是针对HttpClient的。如果要使用Http,则需要使用HttpModule。请参阅我上面链接的文档,但建议您使用HttpClient

问题是,在app.module.ts中,您正在从@angular/common/http导入HttpClientModule,而在您的服务中,您正试图从@angular/http注入HttpClient。这些是与Http客户端不同的版本,@angular/common/Http是最新的。

将您的服务更改为:

import { HttpClient } from '@angular/common/http';
//
@Injectable()
export class DefaultService {
constructor(protected http: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {

@Frozen的Roddy是我的全部default.service.ts。你说如果我有这个方法,我需要调用this.http.post("http://example.com/api/abortProjectWithHttpI‌​nfo",...),但我认为如果我ping服务器,我可以使用default.service中的ping。我只是意识到浏览器中的angular应用程序是空的。HTML将不会显示。。。。这太令人沮丧了。

import { Inject, Injectable, Optional } from '@angular/core';
import { Http, Headers, URLSearchParams } from '@angular/http';
import { RequestMethod, RequestOptions, RequestOptionsArgs } from '@angular/http';
import { Response, ResponseContentType } from '@angular/http';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import '../rxjs-operators';
import { InlineResponseDefault } from '../model/inlineResponseDefault';
import { BASE_PATH, COLLECTION_FORMATS } from '../variables';
import { Configuration } from '../configuration';
import { CustomQueryEncoderHelper } from '../encoder';

@Injectable()
export class DefaultService {
protected basePath = 'http://127.0.0.1:8080/v1';
public defaultHeaders = new Headers();
public configuration = new Configuration();
constructor(protected http: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {
if (basePath) {
this.basePath = basePath;
}
if (configuration) {
this.configuration = configuration;
this.basePath = basePath || configuration.basePath || this.basePath;
}
}
/**
* @param consumes string[] mime-types
* @return true: consumes contains 'multipart/form-data', false: otherwise
*/
private canConsumeForm(consumes: string[]): boolean {
const form = 'multipart/form-data';
for (let consume of consumes) {
if (form === consume) {
return true;
}
}
return false;
}

public isJsonMime(mime: string): boolean {
const jsonMime: RegExp = new RegExp('^(application/json|[^;/ t]+/[^;/ t]+[+]json)[ t]*(;.*)?$', 'i');
return mime != null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
}
/**
* Abort the programm in the project identified by UUID
* @param UUID The UUID
*/
public abortProject(UUID: string, extraHttpRequestParams?: RequestOptionsArgs): Observable<{}> {
return this.abortProjectWithHttpInfo(UUID, extraHttpRequestParams)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json() || {};
}
});
}
/**
* delete a single file at a specified path
* @param UUID The UUID
* @param path The path where to upload.
*/
public deleteFile(UUID: string, path: string, extraHttpRequestParams?: RequestOptionsArgs): Observable<{}> {
return this.deleteFileWithHttpInfo(UUID, path, extraHttpRequestParams)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json() || {};
}
});
}
/**
* Testing the connection
*/
public ping(extraHttpRequestParams?: RequestOptionsArgs): Observable<string> {
return this.pingWithHttpInfo(extraHttpRequestParams)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json() || {};
}
});
}
/**
* Run the programm in the project identified by UUID
* @param UUID The UUID
*/
public runProject(UUID: string, extraHttpRequestParams?: RequestOptionsArgs): Observable<{}> {
return this.runProjectWithHttpInfo(UUID, extraHttpRequestParams)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json() || {};
}
});
}
/**
* Send a single file to the server
* @param UUID The UUID
* @param path The path where to upload.
* @param file The single file to upload.
*/
public sendFile(UUID: string, path: string, file: Blob, extraHttpRequestParams?: RequestOptionsArgs): Observable<{}> {
return this.sendFileWithHttpInfo(UUID, path, file, extraHttpRequestParams)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json() || {};
}
});
}

/**
* 
* Abort the programm in the project identified by UUID
* @param UUID The UUID
*/
public abortProjectWithHttpInfo(UUID: string, extraHttpRequestParams?: RequestOptionsArgs): Observable<Response> {
if (UUID === null || UUID === undefined) {
throw new Error('Required parameter UUID was null or undefined when calling abortProject.');
}
let headers = new Headers(this.defaultHeaders.toJSON()); // https://github.com/angular/angular/issues/6845
// to determine the Content-Type header
let consumes: string[] = [
'application/x-www-form-urlencoded'
];
let canConsumeForm = this.canConsumeForm(consumes);
let useForm = false;
let formParams = new (useForm ? FormData : URLSearchParams as any)() as {
set(param: string, value: any): void;
};
if (UUID !== undefined) {
formParams.set('UUID', <any>UUID);
}
let requestOptions: RequestOptionsArgs = new RequestOptions({
method: RequestMethod.Post,
headers: headers,
body: formParams.toString(),
withCredentials:this.configuration.withCredentials
});
// https://github.com/swagger-api/swagger-codegen/issues/4037
if (extraHttpRequestParams) {
requestOptions = (<any>Object).assign(requestOptions, extraHttpRequestParams);
}
return this.http.request(`${this.basePath}/abort`, requestOptions);
}
/**
* 
* delete a single file at a specified path
* @param UUID The UUID
* @param path The path where to upload.
*/
public deleteFileWithHttpInfo(UUID: string, path: string, extraHttpRequestParams?: RequestOptionsArgs): Observable<Response> {
if (UUID === null || UUID === undefined) {
throw new Error('Required parameter UUID was null or undefined when calling deleteFile.');
}
if (path === null || path === undefined) {
throw new Error('Required parameter path was null or undefined when calling deleteFile.');
}
let headers = new Headers(this.defaultHeaders.toJSON()); // https://github.com/angular/angular/issues/6845
// to determine the Content-Type header
let consumes: string[] = [
'multipart/form-data'
];
let canConsumeForm = this.canConsumeForm(consumes);
let useForm = false;
let formParams = new (useForm ? FormData : URLSearchParams as any)() as {
set(param: string, value: any): void;
};
if (UUID !== undefined) {
formParams.set('UUID', <any>UUID);
}
if (path !== undefined) {
formParams.set('path', <any>path);
}
let requestOptions: RequestOptionsArgs = new RequestOptions({
method: RequestMethod.Delete,
headers: headers,
body: formParams.toString(),
withCredentials:this.configuration.withCredentials
});
// https://github.com/swagger-api/swagger-codegen/issues/4037
if (extraHttpRequestParams) {
requestOptions = (<any>Object).assign(requestOptions, extraHttpRequestParams);
}
return this.http.request(`${this.basePath}/delete`, requestOptions);
}
/**
* 
* Testing the connection
*/
public pingWithHttpInfo(extraHttpRequestParams?: RequestOptionsArgs): Observable<Response> {
let headers = new Headers(this.defaultHeaders.toJSON()); // https://github.com/angular/angular/issues/6845
let requestOptions: RequestOptionsArgs = new RequestOptions({
method: RequestMethod.Get,
headers: headers,
withCredentials:this.configuration.withCredentials
});
// https://github.com/swagger-api/swagger-codegen/issues/4037
if (extraHttpRequestParams) {
requestOptions = (<any>Object).assign(requestOptions, extraHttpRequestParams);
}
return this.http.request(`${this.basePath}/ping`, requestOptions);
}
/**
* 
* Run the programm in the project identified by UUID
* @param UUID The UUID
*/
public runProjectWithHttpInfo(UUID: string, extraHttpRequestParams?: RequestOptionsArgs): Observable<Response> {
if (UUID === null || UUID === undefined) {
throw new Error('Required parameter UUID was null or undefined when calling runProject.');
}
let headers = new Headers(this.defaultHeaders.toJSON()); // https://github.com/angular/angular/issues/6845
// to determine the Content-Type header
let consumes: string[] = [
'application/x-www-form-urlencoded'
];
let canConsumeForm = this.canConsumeForm(consumes);
let useForm = false;
let formParams = new (useForm ? FormData : URLSearchParams as any)() as {
set(param: string, value: any): void;
};
if (UUID !== undefined) {
formParams.set('UUID', <any>UUID);
}
let requestOptions: RequestOptionsArgs = new RequestOptions({
method: RequestMethod.Post,
headers: headers,
body: formParams.toString(),
withCredentials:this.configuration.withCredentials
});
// https://github.com/swagger-api/swagger-codegen/issues/4037
if (extraHttpRequestParams) {
requestOptions = (<any>Object).assign(requestOptions, extraHttpRequestParams);
}
return this.http.request(`${this.basePath}/run`, requestOptions);
}
/**
* 
* Send a single file to the server
* @param UUID The UUID
* @param path The path where to upload.
* @param file The single file to upload.
*/
public sendFileWithHttpInfo(UUID: string, path: string, file: Blob, extraHttpRequestParams?: RequestOptionsArgs): Observable<Response> {
if (UUID === null || UUID === undefined) {
throw new Error('Required parameter UUID was null or undefined when calling sendFile.');
}
if (path === null || path === undefined) {
throw new Error('Required parameter path was null or undefined when calling sendFile.');
}
if (file === null || file === undefined) {
throw new Error('Required parameter file was null or undefined when calling sendFile.');
}
let headers = new Headers(this.defaultHeaders.toJSON()); // https://github.com/angular/angular/issues/6845
// to determine the Content-Type header
let consumes: string[] = [
'multipart/form-data'
];
let canConsumeForm = this.canConsumeForm(consumes);
let useForm = false;
useForm = canConsumeForm;
let formParams = new (useForm ? FormData : URLSearchParams as any)() as {
set(param: string, value: any): void;
};
if (UUID !== undefined) {
formParams.set('UUID', <any>UUID);
}
if (path !== undefined) {
formParams.set('path', <any>path);
}
if (file !== undefined) {
formParams.set('file', <any>file);
}
let requestOptions: RequestOptionsArgs = new RequestOptions({
method: RequestMethod.Post,
headers: headers,
body: formParams.toString(),
withCredentials:this.configuration.withCredentials
});
// https://github.com/swagger-api/swagger-codegen/issues/4037
if (extraHttpRequestParams) {
requestOptions = (<any>Object).assign(requestOptions, extraHttpRequestParams);
}
return this.http.request(`${this.basePath}/files`, requestOptions);
}
}

最新更新