
url로 특정 파라미터를 받아 CRUD API를 테스트하는 과정에서 이런 오류가 발생했습니다.


읽어보니 parameter name information을 찾지 못하고 있는 것 같군요🤔

에러가 난 곳을 찾아보니 특정 article을 조회하는 메소드에서 @PathVariable을 정의하면서, id속성을 명시해 주지 않았기 때문에 이런 오류가 발생하는 것입니다!
즉, 바인딩 되는 파라미터의 이름을 명시해주지 않았기 때문에, class 파일에서 바인딩할 파라미터를 찾지 못한 것이죠.
첫 번째 해결 방법으로는 @PathVariable에 name또는 value속성을 명시해 주는 것입니다.
@GetMapping("/api/articles/{id}")
public ResponseEntity<ArticleResponse> findArticleById(@PathVariable Long id) {
Article article = blogService.findById(id);
return ResponseEntity.ok()
.body(new ArticleResponse(article));
}
@GetMapping("/api/articles/{id}")
public ResponseEntity<ArticleResponse> findArticleById(@PathVariable(name = "id") Long id) {
Article article = blogService.findById(id);
return ResponseEntity.ok()
.body(new ArticleResponse(article));
}
저 같은 경우에는 @ParthVariable(name = "id") Long id로 코드를 수정해줌으로써, @PathVariable의 name속성 값을 id로 명시해 주었습니다.
두 번째 방법은 javac 컴파일 시, -parameters옵션을 추가해 주는 방법입니다.
해당 옵션을 추가하는 방법에는 Gradle과 Intellij 컴파일 옵션을 설정하는 방법이 있습니다.
먼저, Gradle에서 설정하는 방법은 build.gradle파일에 아래 내용을 추가하는 것입니다.
compileJava{
options.compilerArgs << '-parameters'
}
이 옵션은 java에서 javac 컴파일러로 컴파일을 하여 바이트 코드를 생성할 때, 메소드의 매개변수 이름을 유지하도록 해주는 옵션입니다.
지금 우리의 해결 과제인 @PathVariable이나 @RequestParam처럼 매개변수 이름에 의존하는 경우에 유용한 옵션입니다.
만약 저처럼 Intellij를 사용한다면, Intellij의 컴파일 옵션을 수정하는 방법도 있습니다.
방법은, File > Settings > Build, Exception, Deployment < Compiler > Java Compiler위치에 Additional command line parameters 항목에 -parameters옵션을 추가해 주면 됩니다.
