Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Propriedade '_$visited' sendo inserida pela função map do Observable

Se eu tiver o seguinte modelo e serviço:

export class Modelo{

  id: number;
  type: string;
  size: number;

  constructor() {

  }

}
@Injectable()
export class ModeloService {

  constructor(private http: Http) {
  }

  getModeloById(id: number): Observable<Modelo> {
    return this.http.get(myEnvironment.MODELO_SERVICE_PATH + id)
      .map(res => <Modelo> res.json());
  }

}

Se eu logar res.json(), ele montará o retorno é o seguinte:

{
  "id": 28,
  "type": "type",
  "size": null
}

já depois do retorno da função map(), da seguinte maneira:

modeloService.getModeloById(28).subscribe(
    modelo => {
        console.log(modelo);
    },
    error=> console.log(error);
);

O retorno é o seguinte:

{
  "id": 28,
  "type": "type",
  "size": null,
  "_$visited": true
}

Ou seja, essa propriedade "_$visited" é adicionada ao objeto. Isso me atrapalha, pois quando eu tento enviar de volta esse objeto pro WebService, dá erro.

Queria saber se tem como essa propriedade não ser inserida, pois pra ficar retirando na mão toda vez que eu for consumir um serviço é complicado.

3 respostas

Você fez data binding desse dado em algum lugar da sua aplicação? Eu nunca vi o Rxjs adicionar essa propriedade em um objeto depois de um map. Mas já vi isso acontecer pois algumas bibliotecas e libs do Angular utilizam para controle.

Eu não sei a causa, porém, até que seja identificada, você precisará remover essa propriedade.

Fiz uma simples consulta no google por essa propriedade e vi que ela é adicionada pelo PrimeNG,:

https://pt.stackoverflow.com/questions/269928/propriedade-visited-em-objeto-javascript-no-retorno-da-fun%C3%A7%C3%A3o-map-do-oberv

Você utiliza essa lib? Enfim, parece que não é causada pelo map.

solução

Exato, professor.

Esse post do stackoverflow foi feito por um amigo, pedi a ele pra fazer pra mim.

Coloquei a anotação:

@JsonIgnoreProperties(ignoreUnknown = true)

no Resource Jax-Rs e funcionou. Obrigado pela atenção!