我有与 Swagger API 通信的通用方法:
get<ReturnType>(url: string, params?: HttpParams): Observable<ReturnType> {
return this.http.get<ReturnType>(environment.apiUrl + url, {
params: params,
});
}
但是当我使用参数发出请求时,它会尝试到达此端点
http://localhost:3000/user/get?id=10
而不是http://localhost:3000/user/get/10
后端有:
@Get('get/:id')
@ApiResponse({ type: UserDto, status: 201 })
getUser(@Param('id') id: number): UserDto {
return { id: id, name: 'John Doe', email: '[email protected]' };
}
错误在哪里,如何修复?
您希望使用查询参数而不是 url 参数。从
:id
中删除 @Get()
,并使用 @Query('id')
代替 @Param('id')
。一旦你更新了获取请求,其他一切都应该没问题
在 Angular 中,您将
id
作为查询字符串参数而不是路径发送。
我相信目前您正在调用
get
方法,如下所示:
let params = new HttpParams()
.set("id", id);
let obs: Observable<T> = /* service */.get<T>("/user/get", params);
要将
id
作为路径发送,您应该将 URL 构造为“/user/get/10”,而不是使用 HttpParams
。
let obs: Observable<T> = /* service */.get<T>(`/user/get/${id}`, null);