TIL 20240105

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