我正在使用 Angular 服务与 GeoServer REST API 进行交互。 获取图层的 JSON 响应是:
{
"layers": {
"layer": [
{
"name": "facility",
"href": "http://localhost/geoserver/rest/workspaces/unacorn/layers/facility.json"
},
{
"name": "opensky",
"href": "http://localhost/geoserver/rest/workspaces/unacorn/layers/opensky.json"
}
]
}
}
我的服务方式是:
public getLayers(): Observable<Layer[]> {
let layerUrl = this.geoUrl + "/rest/workspaces/unacorn/layers";
return this.http.get<Layer[]>(layerUrl, this.httpOptions)
.pipe(
map(response => {
return {
layers: <Layer[]>response.layers.layer
}
})
)
}
***7/7 更新: 来电者代码是:
ngOnInit() {
let layers = Layer[];
this.geoService.getLayers().subscribe((response: Layer[]) => {
if (response) {
console.log(response.length) // Array length 2
layers = response;
}
});
console.log(layers.length) // Array length 0
在控制台中,首先显示第二个日志输出,这似乎意味着它正在订阅返回之前执行。 我可以在范围内解决这个问题,但我似乎缺少一些基本的东西。
更新结束***
层的模型是:
export interface Layer {
name: string
href: string
}
数据已正确返回,但我无法使模型的映射正常工作。 这是我在编译时看到的错误:
类型“Observable<{ data: any; }>”不可分配给类型“Observable
我读过的所有文档和帖子都表明转换到模型接口是正确的方法。 我可能只是错过了一些简单的事情。 TIA 寻求任何帮助!
错误是那行:
return this.http.get<Layer[]>(layerUrl, this.httpOptions)
您写的是 GET 的返回类型应该是 Layer[],但事实并非如此。它是一个具有 Layers 属性的对象。 GET 的类型(<> 中的值)应该是 API 返回的类型。为了解决这个问题,您可以创建一个表示返回值类型的接口。 解决方案:
export interface ApiResponse {
layers: {
layer: Layer[]
}
}
public getLayers(): Observable<Layer[]> {
let layerUrl = this.geoUrl + "/rest/workspaces/unacorn/layers";
return this.http.get<ApiResponse>(layerUrl, this.httpOptions)
.pipe(
map(response => {
return response.layers.layer;
})
)
}