728x90
문제 개요
@PathVariable, @RequestParam, @Param
등 클래스 파일에서 특정 name 혹은 value 속성을 바인딩할 파라미터를 선택적으로 바인딩할 때 발생하는 에러임
문제가 발생했던 API
엔드포인트
@GetMapping("/location/search")
public ResponseEntity<List<ChargingStationSearchResponseDto>> searchStation(
@RequestParam double swLat,
@RequestParam double swLng,
@RequestParam double neLat,
@RequestParam double neLng
) {
return ResponseEntity.ok(
chargingStationService.findByLatBetweenAndLngBetween(swLat, swLng, neLat, neLng));
}
API Request
http://localhost:8090/api/v1/chargingStation/location/search?
swLat=37.47796003321645&
swLng=127.02408949227622&
neLat=37.49349191883273&
neLng=127.030562644692425
API Response
"statusCode": 500,
"trace": ["java.lang.IllegalArgumentException:
Name for argument of type [double] not specified,
and parameter name information not available via reflection.
Ensure that the compiler uses the '-parameters' flag.", ...
원인 분석
1. 클래스 파일에서 해당 파라미터를 인식하지 못해서 발생한 문제이다.
- 자바 8 이상에서 -parameters 컴파일 플래그를 사용 시 해당 상황에서 오류가 발생하지 않음
- Response에도 -parameters 플래그를 사용하는지 확인하라 명시되어 있음
2. Gradle Build tool을 IntelliJ로 설정한 상태
- IntelliJ로 빌드 시에는 -parameters 컴파일 플래그를 사용하지 않는다.
- IntelliJ 빌드의 컴파일러는 Spring MVC와 같은 프레임워크에서 @RequestParam 사용 시 매개변수 이름이 없어서 컴파일러가 경고를 표시함
- Gradle로 빌드 시에는 -parameters 컴파일 플래그를 사용한다.
- Gradle의 빌드 스크립트는 @RequestParam 사용 시 메소드 매개변수 이름을 자동으로 바인딩을 해준다.
결론(해결 방법)
- 1안 : IntelliJ 빌드 툴에서 -parameters 플래그를 사용하도록 설정한다.
- 개인 설정으로 해결할 수 있는 방법이다.
- 2안 : @RequestParam, @Pathvariable과 같은 어노테이션에서 value 속성을 명시적으로 지정한다.
- 가장 보수적인 방법으로 개인의 빌드 툴을 IntelliJ / Gradle 지정유무 상관없이 해결할 수 있다.
- 3안 : 팀의 빌드 툴을 강제한다. (Gradle로 하던가 IntelliJ로 하던가)
# 작성 사유
클라이언트에서 작업 시 해당 500 에러가 터지면 서버에서 확인하지 않는 이상 원인 파악이 힘들어 작성하게 되었음.
'DEV > Spring' 카테고리의 다른 글
[트러블슈팅] .sql 파일 init이 자동으로 실행되지 않는 문제 원인 / 해결방법 (0) | 2024.02.20 |
---|---|
[트러블슈팅][JPA] OneToOne 양방향 관계 시 의도하지 않은 N+1 문제 발생 원인과 해결 방법 (0) | 2024.02.20 |
[Spring Data JPA] mappedBy에 의한 연관관계 주인이 트랜잭션 권한을 가지는 예시 (0) | 2024.01.16 |
[Spring Data JPA] 1 : N, N : 1 관계의 양방향 매핑과 단방향 매핑 (1) | 2024.01.16 |
[트러블슈팅] @Transactional 미작동 시 해결방법 (4) | 2024.01.04 |