오류 메시지
"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)}"
Todo Controller 에서 할일 생성 날짜 기준 정렬 HTTP Path를 적고 실행했는데 위와 같은 오류 메시지가 떴다.
찾아보니 이 에러의 원인은 하나의 URL에서 여러개의 path가 매핑되어있기 때문이라고 한다.
수정 후 오류는 나지 않았지만, 어떤 자원을 정렬하는지 자원의 이름을 식별할 수 없었고 기능을 추가할때마다 계속 URI를 생성하는 방법이기에 URI가 무한 생성되기에 RESTful 하지 않는 방법이 되었다.
그래서 @RequestParam을 이용해서 Path를 추가하고 날짜 Date 키워드를 추가했다.
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.")
}
}
할일 리스트 생성 날짜 기준 오름차순 정렬
요청 값 sortedByDate에 asc or ASC 를 입력하면 오름차순 정렬
Request URL : http://localhost:8080/todos?sortedByDate=asc
할일 리스트 생성 날짜 기준 내림차순 정렬
요청 값 sortedByDate에 desc or DESC 를 입력하면 내림차순 정렬
Request URL : http://localhost:8080/todos?sortedByDate=DESC