[横書きアイテム]そんなREST APIで大丈夫ですか?本格的なREST APIを実装してみる-コントローラとサービスの分離
13791 ワード
イベント・サービスの作成
現在はEvent Createロジックのみが実装されており、他のロジックはないため、後でテストコードが作成されます.
(JPA機能のみ使用するため、他のロジックがなければサービステストはJPA機能テストとなります!そのため、後続のロジックを追加する際にテストコードを実施します)
ここで重要なのは、DTO to Modelがサービス層で行わなければならないことです.
package com.carrykim.restapi.event.service;
import com.carrykim.restapi.event.infra.EventRepository;
import com.carrykim.restapi.event.model.Event;
import com.carrykim.restapi.event.model.dto.EventDto;
import org.springframework.stereotype.Service;
@Service
public class EventService {
private final EventRepository eventRepository;
public EventService(EventRepository eventRepository) {
this.eventRepository = eventRepository;
}
public Event create(EventDto eventDto){
Event newEvent = eventDto.toModel();
return eventRepository.save(newEvent);
}
}
Event Controlの変更
package com.carrykim.restapi.event.controller;
import com.carrykim.restapi.event.model.Event;
import com.carrykim.restapi.event.model.dto.EventDto;
import com.carrykim.restapi.event.service.EventService;
import org.springframework.hateoas.MediaTypes;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.net.URI;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
@RestController()
@RequestMapping(value = "/api/events", produces = MediaTypes.HAL_JSON_VALUE)
public class EventController {
private final EventService eventService;
public EventController(EventService eventService) {
this.eventService = eventService;
}
@PostMapping("")
public ResponseEntity create(@RequestBody @Valid EventDto eventDto) {
Event newEvent = this.eventService.create(eventDto);
URI uri = linkTo(methodOn(EventController.class).create(new EventDto())).slash(newEvent.getId()).toUri();
return ResponseEntity.created(uri).body(newEvent);
}
}
Reference
この問題について([横書きアイテム]そんなREST APIで大丈夫ですか?本格的なREST APIを実装してみる-コントローラとサービスの分離), 我々は、より多くの情報をここで見つけました https://velog.io/@carrykim/사이드프로젝트-그저-그런-REST-API로-괜찮은가-진정한-REST-API-구현해보기-Controller-Service-분리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol