2017-10-07 53 views
1

我有一个java web服务表示出来提出的Json的列表,这个对象的属性>Convertin res.json()的阵列<Object>

public class Oferta { 
private int id; 
private String categoria; 
private String descricao_oferta; 
private String anunciante; 
private double valor; 
private boolean destaque; 
private List<String> imagens; 
    } 

而且我有我想取出这个JSON一个Angular4项目并存储在一个数组中。我应该怎么做?

Angular4 oferta型号:

export class Oferta { 
public id: number; 
public categoria: string; 
public titulo: string; 
public descricao_oferta: string; 
public anunciante: string; 
public valor: number; 
public destaque: boolean; 
public imagens: Array<Object>; 
} 

的方法,我可以检索JSON对象的列表(工作正常,当我CONSOLE.LOG(的getData)我收到JSON对象列表:

public getData(): Promise<Oferta[]>{ 

    this.ofertas = this.http.get(this.apiURL) 
    .map((res: Response) => <Oferta[]>res.json())      << ERROR WHEN CASTING 

    return new Promise((resolve,reject)=>{ 
     let deu_certo = true 
     if(deu_certo){ 
      setTimeout(() => resolve(this.ofertas),3000); 

     } 
     else{ 
      reject({codigo_erro: 404,mensagem_erro: 'Servidor nao encontrado'}) 
     } 
     //console.log('passou aqui') 


    }) 
    .then((ofertas: Oferta[]) => { 
     console.log('segundo then') 
     return new Promise((resolve2,reject2) => { 
      setTimeout(() => {resolve2(ofertas)},3000) 
     }) 

    }) 
    .then((ofertas: Oferta[]) => { 
     console.log('terceiro then executado apos 3 sec , aguardando outra promisse ser resolvida') 
     return ofertas; 

    }) 
} 

现在,我怎么将它转换为一个数组已经尝试过this.oferta [] = res.json();?不会让我

/////////////这是。我如何在home.com打电话

ngOnInit(){ this.ofertas = this.ofertasService.getData()

this.ofertasService.getOfertas2() 
.then(
    (ofertas: Oferta[]) => { this.ofertas = ofertas 
    console.log('a funçao resolve() foi resolvida depois de 3 segundos') 
    }) 
    .catch((param: any) => { 
    console.log(param) 
    })  
    } 
+0

这是一个javascript/typescript问题。与Java无关 –

回答

1

您只需强制转换提供的数据类属性名相匹配的JSON属性。

getData():Promise<Oferta[]>{ 
    return this.http.get(this.apiURL) 
    .map((res: Response) => <Oferta []>res.json()).toPromise() 
} 

你将不得不从rxjs导入toPromise功能

+0

类型Observable 不可分配为键入'Oferta []'。属性包括缺少类型'Observable 。 –

+0

您是否将返回类型设置为'getData'?你是怎么订阅的? –

+0

https://anotepad.com/notes/xp5pg4看看完整的方法+我如何在home.com.com上致电,感谢帮助的人。 <3 –

0

更新:我能以此来做到这一点:
this.http.get(this.actionUrl) .MAP(RES = > res.json()) .subscribe( 数据=> { this.ofertas =数据; }, ERR => 的console.log( '不能得到ofertas'), ()=>的console.log ('FOi')

但只直接在我的Home.component.ts上,尝试使用我的Oferta.service.ts中的方法getData,我无法在httpert中使用httpertert.service,所以不知道如何即时做到这一点在一个除组件之外的不同课程。

+0

您是如何在组件中声明'ofertas'的? – Alex

+0

public ofertas:Oferta []; –