[横書きアイテム]そんなREST APIで大丈夫ですか?本格的なREST API実装イベント修正ロジック
21435 ワード
Event更新テストの実施
今回はEvent APIの最後の機能であるイベント修正機能を実現します.
考慮すべき事項は以下の通りです.
@Test
public void update_event_success() throws Exception {
//Given
Event event = createEvent(11123);
this.eventRepository.save(event);
String newDescription = "new description";
EventDto eventDto = EventDto.builder()
.name(event.getName())
.description(newDescription)
.build();
//When
//Then
mockMvc.perform(put("/api/events/{id}", event.getId())
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(eventDto)))
.andDo(print())
.andExpect(jsonPath("event.name").value(event.getName()))
.andExpect(jsonPath("event.description").value(newDescription))
.andExpect(jsonPath("_links").exists());
}
@Test
public void update_event_bad_requset_empty_input() throws Exception {
//Given
Event event = createEvent(11223);
this.eventRepository.save(event);
EventDto eventDto = EventDto.builder()
.build();
//When
//Then
mockMvc.perform(put("/api/events/{id}", event.getId())
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(eventDto)))
.andDo(print())
.andExpect(status().isBadRequest())
.andExpect(jsonPath("timestamp").exists())
.andExpect(jsonPath("status").exists())
.andExpect(jsonPath("error").exists())
.andExpect(jsonPath("message").exists());
}
@Test
public void update_event_not_found_wrong_id() throws Exception {
//Given
Integer wrongId = 10010;
EventDto eventDto = createEventDto();
//When
//Then
mockMvc.perform(put("/api/events/{id}", wrongId)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(eventDto)))
.andDo(print())
.andExpect(status().isNotFound())
.andExpect(jsonPath("timestamp").exists())
.andExpect(jsonPath("status").exists())
.andExpect(jsonPath("error").exists())
.andExpect(jsonPath("message").exists());
}
サービスの実装
重要な点は、存在しないIDが入力された場合、NotFoundを返す論理がread()メソッドで実装されていることである.これを再利用すると、コードがより簡潔になります.
public Event update(Integer id, EventDto eventDto){
Event event = this.read(id);
event.setName(eventDto.getName());
event.setDescription(eventDto.getDescription());
return this.eventRepository.save(event);
}
コントローラ実装
ここでは同様に@Valid宣言により無効なEventDtoに対して例外処理を行う.
@PutMapping("/{id}")
public ResponseEntity update(@RequestBody @Valid EventDto eventDto, @PathVariable Integer id){
Event event = this.eventService.update(id, eventDto);
EventResource eventResource = new EventResource(event);
addLinks(eventResource);
return ResponseEntity.ok(eventResource);
}
テスト結果
Reference
この問題について([横書きアイテム]そんなREST APIで大丈夫ですか?本格的なREST API実装イベント修正ロジック), 我々は、より多くの情報をここで見つけました https://velog.io/@carrykim/사이드프로젝트-그저-그런-REST-API로-괜찮은가-진정한-REST-API-구현해보기-Event-수정-로직-구현하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol