I'm having a little trouble getting the correct observable type from an http.get request. Here is the function I'm having trouble on:
getMovie(title:string, year:number): Observable<Movie> {
    const params = new HttpParams()
        .set('title', title)
        .set('year', year.toString());
    return this.http.get(this.moviePath, {params})
  }
As you can see I want to receive and Observable of the class Movie from my backend api using the parameters 'title' and 'year'. The problem is that the reponse always comes back with the type Observable<Object> and not Observable<Movie>.
I'm aware that I could create a new Movie instance giving it the properties recieved from the list. The problem with that is that my movie class has properties that are optional. Here is my movie class:
export class Movie {
  title:string;
  year?:number;
  imdb?:string;
  trailer?:string;
  reviewClip?:string;
  reviewSummary?:string;
  reviewScore:number;
  createdAt?:Date;
  bestWeek:boolean;
  bestMonth:boolean;
}
Does anybody know an easy way to get the response to be of the type Observable<Movie> instead of Observable<Object>
If you are using HttpClient & Http,It will return you automatically Observable.
So modify your code as
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable'
import { HttpClient,HttpHeaders,HttpResponse,HttpParams } from '@angular/common/http';
import { environment } from '../../../../environments/environment';
import { Movie } from '../models/movie'
@Injectable()
export class MovieService {
  constructor(private http:HttpClient) {
   }
  getMovie(title:string, year:number) {
    const params = new HttpParams()
        .set('title', title)
        .set('year', year.toString());
    return this.http.get<Movie>(this.moviePath, {params})
  }
}
This will give you response of type Movie
May be you can try to typecast from json response.
An example
public getEmployees(): Observable<IEmployee[]> {  
        return this.http.get(this._repositoryURL)  
            .map((response: Response) =>
   { return <IEmployee[]>response.json() })  
            .catch(this.handleError);  
 }  
Your code
getMovie(title:string, year:number): Observable<Movie> {
    const params = new HttpParams()
        .set('title', title)
        .set('year', year.toString());
    return this.http.get(this.moviePath, {params}).map((response: Response) => { return <Movie>response.json() })  
                .catch(this.handleError);
 }
 private handleError(errorResponse: Response) {  
        console.log(errorResponse.statusText);  
        return Observable.throw(errorResponse.json().error || "Server error");  
 } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With