반응형
org.springframework.web.util.NestedServletException: Request processing failed; java.lang.IllegalArgumentException: Name for argument type [java.lang.Long] not available, and parameter name information not found in class file either. 에러
parameter name information, 파라미터 이름에 대한 정보를 찾지 못하는 문제이다.
postman으로 테스트했을 때는 문제가 없었으나 테스트 코드를 작성하니 위 에러가 발생했다.
방법1
👉 컨트롤러에서 파라미터 이름에 대한 정보만 추가
테스트 코드
굉장히 간단한 구조이다.
get 메소드로 url에 접근하고 서버 응답 status가 200 성공인지 확인한다.
@Test
public void 내_정보_조회() throws Exception {
Long id = 1L;
String url = "/users/" + id;
mvc.perform(get(url))
.andExpect(status().isOk());
}
Controller (수정 전)
@ResponseBody
@GetMapping("/users/{id}")
public UserResponseDto myPage(@PathVariable Long id) {
return userService.findByUserId(id);
}
Controller (수정 후)
@PathVariable에서 name을 지정해주었다.
@ResponseBody
@GetMapping("/users/{id}")
public UserResponseDto myPage(@PathVariable(name = "id") Long id) {
return userService.findByUserId(id);
}
방법 2
위 방법에 대해 의문이 드는 사람이 많을 것이다.
name과 변수명이 동일한 경우에는 생략 가능하지 않나?
컴파일 시에는 debugging enabled가 되어야 스프링이 찾을 수 있다.
The matching of method parameter names to URI Template variable names can only be done if your code is compiled with debugging enabled. If you do have not debugging enabled, you must specify the name of the URI Template variable name to bind to in the @PathVariable annotation.
이에 대해서는 해결 방법을 찾으면 추가하겠다. TODO
참고
반응형
'Develop > Spring+JPA' 카테고리의 다른 글
[Spring Security] 초간단 로그인 만들기 (2) | 2022.03.07 |
---|---|
[Spring Security] 스프링 시큐리티 간단 적용기 (1) | 2022.02.07 |
PATCH 메소드는 언제 사용하는가? (3) | 2022.01.25 |
[Spring/MariaDB] 연동 시 자주 발생하는 오류 (0) | 2021.12.26 |
Entity vs DTO vs VO (3) | 2021.11.23 |