В angular я использую шаблон адаптера для адаптации ответа Http «get» к «Счету».
Модели были упрощены для удобства чтения.
export interface Adapter<T> {
adapt(item: any): T;
}
export class Invoice {
constructor(
public id: number,
public customerId: number,
public customerName: string,
) {}
}
@Injectable({
providedIn: 'root'
})
export class InvoiceAdapter implements Adapter<Invoice> {
adapt(item: any): Invoice {
return new Invoice (
item.id,
item.customer_id,
item.customer,
);
}
}
А затем используйте его следующим образом.
public getAll(): Observable<Invoice[]> {
return super
.getAll()
.pipe(map((data: any[]) => data.map(item => this.invoiceAdapter.adapt(item))));
}
Для запроса Http post адаптируйте 'Invoice' к 'InvoicePost', то есть модели, аналогичной ожидаемой в бэкэнде.
export class InvoicePost {
constructor(
public id: number,
public customer_id: number,
public customer: string,
) {}
}
@Injectable({
providedIn: 'root'
})
export class InvoicePostAdapter implements Adapter<InvoicePost> {
adapt(item: any): InvoicePost {
return new InvoicePost (
item.id,
item.customerId,
item.customerName,
);
}
}
Как использовать этот «InvoicePostAdapter» при использовании сообщения Http?