使用 Angular HttpClient 从 Rest Request 获取 "Real Objects"(字段和方法)

Get "Real Objects" (fields and methods) from Rest Request with Angular HttpClient

所以我遇到了与 问题相同的问题。

这个问题是在 2017 年发布的,所以我想知道现在有没有 better/easier 方法可以做到这一点?

我想到的最佳方案是 HttpInterceptor,因此服务和 classes 看起来像这样:

@Injectable({
  providedIn: 'root'
})
export class ExampleService {
  constructor(private http: HttpClient) { }

  getHouse(): Observable<House> {
    return this.http.get<House>("MyRestPath");
  }
}

然后 class 像这样使用它

someRandomMethod(): void {
    this.exampleService.getHouse().subscribe(house => {
      console.log(house.doSomething()) // Notice the method here
      console.log(house.address) // aswell as a field
    })
  }

这可能吗,还是我们仍然必须像上面提到的 question/answers 那样做?

拦截器可以用来存档它。对于维护此代码的任何开发人员来说,这就像魔法一样。这将是一个非常复杂的问题:HTTP 客户端会从后端请求数据并将其包装到另一个对象中。 The single responsibility principle 建议我们避免使用它。服务肯定是处理此类逻辑的更好地方。

export class ExampleService {
  constructor(private http: HttpClient) { }

  getHouse(): Observable<House> {
    return this.http.get<HouseDto>("MyRestPath")
               .pipe(map(house => new House(house)));
  }
}