본문 바로가기
Spring

[Spring] 일정 등록 시 ToDoList 넣기

by qoth_0 2024. 3. 21.
728x90
반응형

 

 

 💡 ToDoList 입력은 선택사항 (없어도 일정등록 가능해야 함)

 💡 하나의 일정에 여러 ToDoList 입력 가능 → 테이블 따로 생성

 

 

 ERD

 

일정 = Event, 투두리스트 = ToDoList

투두리스트가 일정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이 맞지 않음)

 

SELECT * FROM event where id = 9;
SELECT * FROM to_do_list where event_id = 9;

 

 

성공⭐

 

 

 

 

 

728x90
반응형