如何在Angular中使用FOREIGN-KEY表使用HATEOAS API(HAL)

时间:2020-06-05 17:02:05

标签: mysql angular typescript spring-hateoas hateoas

您好,希望您一切都好,我希望使用带有Angular外键表的HATEOAS Api。

我在MySql数据库中有3个表:

==>商标:ID,名称,徽标。

==> TypeGamme:ID,名称,描述。

==> Gammes:id,libelleGamme,descriptionGamme,marque,typeGamme。

?顺便说一句:“ Gammes”在法语中意为“范围”,“ Marque”是“品牌”。

返回“ Gammes”表(http://localhost:9031/gammes)的HATEOAS JSON是:

{
  "_embedded" : {
    "gammes" : [ {
      "id" : 1,
      "libelleGamme" : "E250",
      "descriptionGamme" : "E250 mercedes....",
      "_links" : {
        "self" : {
          "href" : "http://localhost:9031/gammes/1"
        },
        "gamme" : {
          "href" : "http://localhost:9031/gammes/1"
        },
        "marque" : {
          "href" : "http://localhost:9031/gammes/1/marque"
        },
        "typeGamme" : {
          "href" : "http://localhost:9031/gammes/1/typeGamme"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:9031/gammes{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:9031/profile/gammes"
    },
    "search" : {
      "href" : "http://localhost:9031/gammes/search"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 1,
    "totalPages" : 1,
    "number" : 0
  }
}

我能够在数据表中显示“ id”,“ libelleGamme”和“ descriptionGamme”,但其余属性却无法显示。所以我创建了一个像这样的解决方案的方法:

// Gammes.service.ts

// this method has a link in parametre and returns the object of the Marque
public getMarque(url): Observable<Brand> {
 return this.http.get<Brand>(url);}


// GammesComponent.ts

getRangeBrand(url): Brand {
   this.GammeService.getMarque(url).subscribe(
   data => { this.brand = data; });
   return this.brand;;}

// GammesComponent.html

<ul>
  <li *ngFor="let g of gammes">
    <a>{{g.id}}</a>
    <a>{{g.libelleGamme}}</a>
    <a>{{g.descriptionGamme}}</a>
    <a>{{getRangeBrand(g._links.marque.href).name}}</a>
    <a>{{getRangeBrand(g._links.typeGamme.href).name}}</a>
  </li>
</ul>

因此它在后端给了我无限循环调用,希望您有所帮助。谢谢!

0 个答案:

没有答案