Todo 오류 수정 - fix: (Spring) Ambiguous handler methods mapped for '/todos/19'(HTTP path)

박미소·2024년 1월 8일
0

코틀린

목록 보기
22/44

오류 메시지

"message": "Ambiguous handler methods mapped for '/todos/19': {public void com.teamsparta.todo.domain.todo.controller.TodoController.getAscOrDescTodoList(java.lang.String), public org.springframework.http.ResponseEntity com.teamsparta.todo.domain.todo.controller.TodoController.getTodo(long)}"




1차 수정 전과 수정 후


Todo Controller 에서 할일 생성 날짜 기준 정렬 HTTP Path를 적고 실행했는데 위와 같은 오류 메시지가 떴다.

찾아보니 이 에러의 원인은 하나의 URL에서 여러개의 path가 매핑되어있기 때문이라고 한다.

수정 후 오류는 나지 않았지만, 어떤 자원을 정렬하는지 자원의 이름을 식별할 수 없었고 기능을 추가할때마다 계속 URI를 생성하는 방법이기에 URI가 무한 생성되기에 RESTful 하지 않는 방법이 되었다.

그래서 @RequestParam을 이용해서 Path를 추가하고 날짜 Date 키워드를 추가했다.





2차 수정


TodoController.kt

@GetMapping
    fun getTodoList(
        @RequestParam("sortedByDate") sortedByDate: String
    ): ResponseEntity<List<TodoResponse>> {
        return ResponseEntity
            .status(HttpStatus.OK)
            .body(todoService.getTodoList(sortedByDate))
    }

TodoServiceImpl.kt

override fun getTodoList(sortedByDate: String): List<TodoResponse> {
        return when (sortedByDate.lowercase()) {
            "asc" -> {
                todoRepository.findAll().map { it.toResponse() }.sortedBy { it.createdDate }
            }
            "desc" -> {
                todoRepository.findAll().map { it.toResponse() }.sortedByDescending { it.createdDate }
            } else -> throw IllegalArgumentException("Please select a sort option.")
        }
    }



0개의 댓글