2024. 1. 5. 22:01ㆍ스프링
어제와 이어서 써보자면, swagger로 api를 작성하였는데,,,
??????? 왜 저 list에 todo가 한 번 더 들어오는 거지?
commentlist 인건데 todo가 한 번 더 들어오는 것이 아니겠는가...
아무리 봐도 이상한 것 같아서,, 제대로 나오게 하기 위해서 아래와 같은 노력을 했다..
처음에는 todos(엔티티)에다가
@OneToMany(mappedBy = "todo", fetch = FetchType.LAZY, cascade = [CascadeType.ALL], orphanRemoval = true)
val comment: MutableList<Comments> = mutableListOf()
이 값을 list로 바꿔주었더니
TodosResponse 부분에 comments로 바꿔주고,
fun addComments(comments: Comments){
comment.add(comments)
}
fun removeComments(comments: Comments){
comment.remove(comments)
}
아래의 fun 부분들에 Unresolved reference: add 와 같은 에러가 발생하였다... 아마 이건 list로 바꿔주면 안되는 가 보다 싶었다.. 그 이유는 정확하게는 모르니 추후에 찾아보려고 한다!
그래서 처음 바꿔보려고 노력한것이 물거품이 되었다...
그래서 다음으로는,
List로 CommentsResponse(id, nickname, commented)를 묶도록 해주었다.
var comments: List<CommentsResponse>
묶어주니 원하는 값이 예로 나오긴 했다.. 휴 우선 반은 성공했다..
그리고 아래 toResponse에 commentList를 주고 컬럼을 만드는 것이 아닌 임시로 만들 수 있는
@Transient
// val commentList: List<Comments>을 추가하여 작성하였는데,, 계속
servlet.service() for servlet [dispatcherservlet] in context with path [] threw exception [request processing failed: java.lang.nullpointerexception: parameter specified as non-null is null
이런 오류가 나와서 좀 멘붕이 나왔었다...
override fun getTodosList(): List<TodosResponse> {
return todoRepository.findAll(Sort.by(Sort.Direction.DESC,"day")).map { it.toResponse() }
}
그래서 이처럼 map를 이용해 보면 어떨가 하고,, 응용을 해서 아래처럼 작성해주었다.
fun Todos.toResponse(): TodosResponse {
return TodosResponse(
id = id!!,
title = title,
description = description,
day = day,
nickname = nickname,
complete = complete,
comments = comment.map { it.toResponse() }
)
}
그런데!!! 정말 map 로 해주니까 내가 원했던 것처럼 나왔다!
이거 해결하려고 긴 시간을 투자했는데,, 결국은 한 줄 로직 차이였던거라 좀 허무하긴 했지만,, 결국은 해내서 주말에 조금 마음 놓고 참여할 수 있었다.. 앞으로도 늦을지언정 포기하지말고 꼭 하자ㅏ 라는 다짐을 했다!
'스프링' 카테고리의 다른 글
TIL 20240109- JPA Auditing (0) | 2024.01.09 |
---|---|
TIL 20240108- 뉴스피드 프로젝트 시작 (0) | 2024.01.08 |
TIL20231231 (0) | 2023.12.31 |
TIL 20231229 (0) | 2023.12.29 |
TIL 20231228 (0) | 2023.12.28 |