프로젝트 중 아래와 같이 컨트롤러를 작성하고 run을 하였는데
java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path
위와 같은 에러가 발생하였다.
@RestController
@RequiredArgsConstructor
public class FileDeleteController {
private final FileDeleteService fileDeleteService;
@DeleteMapping("/delete/{fileId}")
public String deleteAll(@PathVariable Long fileId){
return fileDeleteService.deleteAll(fileId);
}
@DeleteMapping("/delete/{fileVersionId}")
public String deleteOne(@PathVariable Long fileVersionId){
return fileDeleteService.deleteOne(fileVersionId);
}
}
해당 에러는 하나의 Url을 여러개의 컨트로러에 매핑시켰기 때문에 발생하는 것이다.
즉, url로 들어오는 것은 delete/long 이기 때문에 동일한 url을 두개의 컨트롤러에 매핑한 셈이다.
따라서 중복되는 url이 없도록 하나의 컨트롤러에는 하나의 url을 배정해줬다.
@RestController
@RequiredArgsConstructor
public class FileDeleteController {
private final FileDeleteService fileDeleteService;
@DeleteMapping("/delete/file/{fileId}")
public String deleteAll(@PathVariable Long fileId){
return fileDeleteService.deleteAll(fileId);
}
@DeleteMapping("/delete/fileVersion/{fileVersionId}")
public String deleteOne(@PathVariable Long fileVersionId){
return fileDeleteService.deleteOne(fileVersionId);
}
}
위와 같이 바꿔서 해결했다.