Angular HTTP 客户端 GeoServer REST API 映射

问题描述 投票:0回答:2

我正在使用 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”。 输入 '{ 数据:任意; }' 缺少类型“Layer[]”中的以下属性:length、pop、push、concat 和 29 more.ts(2322)

我读过的所有文档和帖子都表明转换到模型接口是正确的方法。 我可能只是错过了一些简单的事情。 TIA 寻求任何帮助!

angular http geoserver
2个回答
0
投票

错误是那行:

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;
      })
    )
}


0
投票

目前我正在使用 Angular 18 服务与 GeoServer REST API 进行交互。 获取工作空间的方法

但是我在控制台上收到此错误:

控制台出错

我想知道问题是否与我的请求中使用的标头有关?您能否分享一下您根据请求使用的结构。

© www.soinside.com 2019 - 2024. All rights reserved.