getForEntity()는 getForObject()와 같은 방법으로 작동하지만, 응답 결과를 나타내는 도메인 객체를 반환하는 대신 도메인 객체를 포함하는 ResponseEntity 객체를 반환한다. ResponseEntity에는 응답 헤더와 같은 더 상세한 응답 콘텐츠가 포함될 수 있다.
postForLocation()은 postForObject()와 동일하게 작동하지만, 리소스 객체 대신 새로 생성된 리소스의 URI를 반환한다는 것이 다르다
publicIngredientcreateIngredient(Ingredient ingredient) {ResponseEntity<Ingredient> responseEntity =rest.postForEntity("<http://localhost:8080/ingredients>", ingredient,Ingredient.class);log.info("New resource created at "+responseEntity.getHeaders().getLocation());returnresponseEntity.getBody();}
Traverson으로 REST API 사용하기
Traverson은 스프링 데이터 HATEOAS에 같이 제공되며, 스프링 애플리케이션에서 하이퍼미디어 API를 사용할 수 있는 솔루션이다. Traverson은 '돌아다닌다는(traverse on)'의 의미로 붙여진 이름이며, 여기서는 관계 이름으로 원하는 API를 사용할 것이다.
예를 들어, 모든 식자재 리스트를 가져온다고 해보자. 각 ingredients 링크들은 해당 식자재 리소스를 링크하는 href 속성을 가지므로 그 링크를 따라가면 된다.
여기서는 tacos 링크 다음에 recents 링크를따라간다. 그러면 최근 생성된 타코 리소스에 도달하므로 toObject()를 호출하여 해당 리소스를 가져올 수 있다. 여기서 tacoType은 ParameterizedTypeReference 객체로 생성되었으며, 우리가 원하는 Resources<Taco> 타입이다.
따라서 API의 이동과 리소스의 변경이나 삭제 모두를 해야 한다면 RestTemplate과 Traverson을 함께 사용해야 한다. Traverson은 새로운 리소스가 생성될 링크로 이동할 때도 사용할 수 있으며, 이동한 다음에는 해당 링크를 RestTemplate에 지정하여 우리가 필요한 POST, PUT, DELETE 또는 어떤 다른 HTTP 요청도 할 수 있다.
예를 들어, 새로운 식자재(Ingredient 객체)를 타코 클라우드 메뉴에 추가하고 싶다면, 다음의 addIngredient() 메서드처럼 Traverson과 RestTemplate을 같이 사용하여 새로운 Ingredient 객체를 API에 POST하면 된다.