我有两个应用程序,一个名为bar,它以HAL格式提供资源。另一个是bcm,用于消费该服务。
bar 的响应示例如下:
你看到了一些丑陋的代码。其中之一是,我没有为我的集合使用任何泛型。另一个问题是,我获取Resource_ID非常复杂,并且我使用StringUtils.remove多次来提取自身网址。
我相信必须有更方便的方法来通过Spring消费HAL-Response。
谢谢。
[
{
"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"
}
}
},
{
...
现在我尝试使用Spring 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;
}
你看到了一些丑陋的代码。其中之一是,我没有为我的集合使用任何泛型。另一个问题是,我获取Resource_ID非常复杂,并且我使用StringUtils.remove多次来提取自身网址。
我相信必须有更方便的方法来通过Spring消费HAL-Response。
谢谢。
new ParameterizedTypeReference<Resource<BerufResource>>(){}
来避免创建子类。 - afaulconbridge