RestApi 만들기 - 이벤트 목록 조회 API구현 (9)
- SPRING START!/restAPI😢
- 2021. 3. 6. 00:25
반응형
반응형
먼저 테스트 코드부터 작성하자.
@Test
void eventQuery() {
IntStream.range(0, 30)
.forEach(this::generateEvent);
}
private void generateEvent(int index) {
Delivery delivery = Delivery.builder()
.item("Delivery" + index)
.user("klom")
.build();
deliveryRepository.save(delivery);
}
이렇게 작성하면
나는 0번부터 30번까지의 이벤트를 생성하는 로직이다.
그러면 생각해야 될것이
이제 이것들을 테스트를 해야 된다.
최종 코드는 다음과 같다.
@Test
void eventQuery() throws Exception {
IntStream.range(0, 30)
.forEach(this::generateEvent);
mockMvc.perform(get("/api/delivery")
.param("page","2")
.param("size","10")
.param("sort","item,DESC"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("page").exists());;
}
이것을 실행해보자.
어디서 잘못되었다.
에러 코드를 읽어보니
get은 허용이 되지 않는다고 한다.
그래서 get을 만들러 가자.
@GetMapping
public ResponseEntity<?> deliveryList() {
return ResponseEntity.ok().build();
}
만들었다.
그러면 잘 나올까?
page가 존재하지 않는다고 한다.
그러면 만들어야지.
@GetMapping
public ResponseEntity<?> deliveryList(Pageable pageable) {
Page<Delivery> page = deliveryRepository.findAll(pageable);
return ResponseEntity.ok(page);
}
페이지에 대한 정보를 모두 찾아서 등록을 시켜줬다.
그래도 아직도 정상적으로 나오지 않는다.
다행인건
이런식으로 리스트는 보여진다는 것이다.
그 이유는 아직 리소스로 만들지 않았기 때문이다.
리소스를 만들때 PagedResourcesAssembler를 이용하면 편하다고 한다.
이용하자.
@GetMapping
public ResponseEntity<?> deliveryList(Pageable pageable, PagedResourcesAssembler<Delivery> assembler) {
Page<Delivery> page = deliveryRepository.findAll(pageable);
var pagedModel = assembler.toModel(page, DeliveryModel::modelOf);
return ResponseEntity.ok(pagedModel);
}
결과는...
드디어 성공
근데 여기까지 하면 다한것일까?
아니다.
우리는 해야할것이 더 남아있다.
바로 문서를 만들어야 된다.
@Test
void eventQuery() throws Exception {
IntStream.range(0, 30)
.forEach(this::generateEvent);
mockMvc.perform(get("/api/delivery")
.param("page", "2")
.param("size", "10")
.param("sort", "item,DESC"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("page").exists())
.andDo(document("query-events",
links(linkWithRel("first").description("첫번째 페이지"),
linkWithRel("last").description("마지막 페이지"),
linkWithRel("prev").description("이전 페이지"),
linkWithRel("self").description("현재 페이지")),
requestParameters(parameterWithName("page").description("현재 페이지"),
parameterWithName("size").description("가져오는 데이터 수"),
parameterWithName("sort").description("정렬되는 방법")),
responseFields(fieldWithPath("page.size").description("페이지 크기"),
fieldWithPath("page.totalElements").description("전체 갯수"),
fieldWithPath("page.totalPages").description("전체 페이지"),
fieldWithPath("page.number").description("현재 페이지"),
fieldWithPath("_links.first.href").description("첫번째 링크"),
fieldWithPath("_links.prev.href").description("이전 링크"),
fieldWithPath("_links.self.href").description("현재 링크"),
fieldWithPath("_links.last.href").description("마지막 링크"),
fieldWithPath("_embedded.deliveryList[].id").description("인덱스"),
fieldWithPath("_embedded.deliveryList[].item").description("상품"),
fieldWithPath("_embedded.deliveryList[].user").description("판매인"),
fieldWithPath("_embedded.deliveryList[].deliveryTime").description("배송일"),
fieldWithPath("_embedded.deliveryList[].deliveryEndTime").description("도착 예상일"),
fieldWithPath("_embedded.deliveryList[].status").description("배송 상태"),
fieldWithPath("_embedded.deliveryList[].itemPrice").description("물품 가격"),
fieldWithPath("_embedded.deliveryList[].deliveryCost").description("배달 비용"),
fieldWithPath("_embedded.deliveryList[]._links.query-events.href").description("목록으로"),
fieldWithPath("_embedded.deliveryList[]._links.update-events.href").description("업데이트하기"),
fieldWithPath("_embedded.deliveryList[]._links.self.href").description("현재 이벤트"),
fieldWithPath("_embedded.deliveryList[]._links.profile.href").description("현재 작업")
)
));
최종본...
힘들다...
이제 직접 보자.
잘 나온다.;;
이거 생각보다 힘드군...;;
반응형
'SPRING START! > restAPI😢' 카테고리의 다른 글
RestApi 만들기 - 이벤트 수정 API구현 (11) (0) | 2021.03.11 |
---|---|
RestApi 만들기 - 이벤트 조회 API구현 (10) (0) | 2021.03.09 |
RestApi 만들기 - API인덱스 지점 만들기 (8) (0) | 2021.03.03 |
RestApi 만들기 - 각종 문서 조각 생성하기(6) (0) | 2021.02.24 |
RestApi 만들기 - spring-rest-docs (5) (0) | 2021.02.19 |