mike-neckのブログ

Java or Groovy or Swift or Golang

SpringのRestTemplate で Rest Repository が返す application/hal+json からオブジェクトを取得する

何か日本語でなかったため。

実行するのは spring-web が jar にある Java SE 環境(Spring context は存在しない)。


  • 必要なライブラリー
    • org.springframework.hateoas:spring-hateoas とその依存ライブラリー
  • 使ったバージョン
    • spring-core: 4.3.13.RELEASE
    • spring-hateoas: 0.23.0.RELEASE
    • (spring-boot: 1.5.9.RELEASE)

public static void main(String[] args) {
    final ObjectMapper objectMapper = new ObjectMapper().registerModule(new Jackson2HalModule())
            .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
            .setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
    final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(objectMapper);
    converter.setSupportedMediaTypes(Collections.singletonList(MediaTypes.HAL_JSON));
    final RestTemplate restTemplate = new RestTemplate(Collections.singletonList(converter));
    final ResponseEntity<PagedResources<Resource<SomeData>>> entity =
            restTemplate.exchange("http://localhost:5000/app/some-data",
                    HttpMethod.GET,
                    null,
                    new ParameterizedTypeReference<PagedResources<Resource<SomeData>>>() {});
    final List<SomeData> list = entity.getBody().getContent().stream()
            .map(Resource::getContent)
            .collect(toList());
    System.out.println(list);
}