2つのアプリケーションがあります.1つはbarと呼ばれ、どのようなリソースがHAL形式で提供されますか。もう1つはbcmです。RestTemplateを使用したSpring Hateoas Restservice
例応答のバーは次のようになります。
[
{
"name":"Brenner/in",
"_links":{
"self":{
"href":"..host/bbsng-app-rest/betrieb/15"
}
}
},
{
"name":"Dienstleistungshelfer/in HW",
"_links":{
"self":{
"href":"..host/bbsng-app-rest/betrieb/4"
}
}
},
{
...
今、私は春RestTemplateを使用してBCMからそれを消費してみてください。私のソリューションはうまくいきますが、私はその解決策には何とか満足していません。もっとクリーンな方法があると思います。
RestServiceを消費する私のクライアントコードは次のようになります。
@Autowired private RestTemplate template;
@Override
@SuppressWarnings("unchecked")
public BerufListe findeAlleBerufe() {
final BerufListe berufListe = new BerufListe();
final ResponseEntity<List> entity = template.getForEntity(LinkUtils.findBeruf(), List.class);
if (OK.equals(entity.getStatusCode())) {
final List<LinkedHashMap> body = entity.getBody();
for (final LinkedHashMap map : body) {
final LinkedHashMap idMap = (LinkedHashMap) map.get("_links");
String id = remove(String.valueOf(idMap.get("self")), "href=");
id = remove(id, "{");
id = remove(id, "}");
final String name = String.valueOf(map.get("name"));
final Beruf beruf = new Beruf(id, name);
berufListe.add(beruf);
}
}
return berufListe;
}
あなたが見るように、いくつかの醜いコードがあります。そのうちの1つは、自分のコレクションには何のジェネリックもないということです。もう一つのポイントは、私はResource_IDを非常に複雑にしています。私はStringUtils.removeを何度か使って自己のURLを抽出します。
SpringのHAL-Responseをより便利に使用する方法が必要であると確信しています。
ありがとう。
この回答の最新のアップデートはありますか? – Snekse
残念ながら。しかし、私はまだそれ以来多くの研究をしていません。 –
'ParameterizedTypeReference>(){}'を使うと、サブクラス化を避けることができます。 –
afaulconbridge