HATEOAS 적용을 일관성있게 하기위해서 FoodController 메서드 중 새로운 식품을 등록하는 메서드인 postFood 메서드도 리턴유형을 ResponseEntity<Food> 에서 ResponseEntity<FoodResource> 로 수정한다.
우선 테스트 메서드 postSave 부터 수정한다.
변경된 부분은 mvc.perform 메서드를 ResultActions 형의 result 변수에 할당하고있다. 할당한 변수를 내부검증 메서드인 verfiyResultContent 메서드에 파라미터로 전달하고 있다.
다음은 FoodController 의 postFood 메서드이다.
리턴문에서 body 파라미터로 assembler를 통해 food객체를 FoodResource 객체로 변환해주는 작업이 수정되었다.
이전글: 냉장고 가계부 프로젝트 8
다음글: 냉장고 가계부 프로젝트 10
우선 테스트 메서드 postSave 부터 수정한다.
@Test
public void postSave() throws Exception {
given(jpaFoodService.save(any(Food.class))).willReturn(milk);
final ResultActions result = mvc.perform(post("/foods")
.content(mapper.writeValueAsString(milk))
.contentType(MediaType.APPLICATION_JSON_UTF8));
result.andExpect(status().isCreated())
.andExpect(redirectedUrlPattern("**/foods/{id:\\d+}"));
verifyResultContent(result);
}
변경된 부분은 mvc.perform 메서드를 ResultActions 형의 result 변수에 할당하고있다. 할당한 변수를 내부검증 메서드인 verfiyResultContent 메서드에 파라미터로 전달하고 있다.
다음은 FoodController 의 postFood 메서드이다.
@PostMapping
public ResponseEntity<FoodResource> postFood(@RequestBody final Food food) {
jpaFoodService.save(food);
URI location = MvcUriComponentsBuilder.fromController(getClass())
.path("/{id}")
.buildAndExpand(food.getId())
.toUri();
return ResponseEntity.created(location).body(assembler.toResource(food));
}
리턴문에서 body 파라미터로 assembler를 통해 food객체를 FoodResource 객체로 변환해주는 작업이 수정되었다.
이전글: 냉장고 가계부 프로젝트 8
다음글: 냉장고 가계부 프로젝트 10