[Spring] 일정 등록 시 ToDoList 넣기
💡 ToDoList 입력은 선택사항 (없어도 일정등록 가능해야 함)
💡 하나의 일정에 여러 ToDoList 입력 가능 → 테이블 따로 생성
ERD
투두리스트가 일정ID를 FK로 갖고 있고, 일정은 투두리스트에 대한 정보를 가지고 있지 않는다.
Spring
ToDoList에서 @JoinColumn으로 Event의 Id를 가지고 있다.
EventRequest는 MultipartFile을 포함하고 있으므로 form-data로 데이터를 전달해줘야 한다.
그렇다면 ToDoList는 어떻게 입력 받을까?
보통 일정 등록을 할 때 ToDoList에 대한 내용도 함께 입력을 하기 때문에 동일 API에서 데이터를 받아줘야 한다.
EventController에서 일정 등록 API를 보면 EventRequest 외에도 @RequestPart를 사용하여 List로 ToDoListRequest를 함께 받아주고 있다.
추가로 ToDoList를 입력하지 않고도 일정 등록이 가능해야 하기 때문에, required = false로 값이 존재하지 않을 경우는 null 값을 할당하도록 한다.
→ EventService로 전달
@RequestPart는 multipart/form-data로 파일과 JSON 데이터를 하나의 API 에서 한 번에 처리할 수 있게 한다.
[Spring Boot] @RequestParam vs @RequestPart
조사하게 된 원인 프로젝트를 하면서 Multipart 데이터로 JSON과 이미지 파일 데이터를 함께 받기 위해 스프링 기능을 찾던 도중 @RequestPart에 대해 새로 알게 되었다. @RequestParam이라는 어노테이션도
somuchthings.tistory.com
더 자세하게 보고 싶으면 위 내용을 참고하면 좋을 듯
이제 EventService에서 EventRequest로 받은 일정 테이블 관련 데이터로 Event 객체를 조립해주고,
해당 Id를 ToDoList가 가져가야 하므로 우선 save해준다.
그 후, List<ToDoListRequest>가 null이 아닐 경우 for문으로 하나씩 가져와서 ToDoList 객체로 조립해하고 save한다.
→ 위에서 save한 event를 가져와 Id값을 갖고 있도록 한다.
테스트
postman으로 form-data에 toDoListRequests로 JSON 데이터를 입력
→ 이때, Content-Type을 꼭 application/json으로 해줘야 한다.
안하면 이런 에러가 뜬다. (Content-Type이 맞지 않음)
성공⭐