Spring 컨트롤러에서 @PathVariable로 null 값을 받는 경우 처리하는 방법입니다.
Spring Boot 3 버전(3.2.4)에서 진행하였습니다.
@PathVariable 값이 null로 들어오는 경우
@PathVariable에 null이 들어오면 다음과 같은 응답값을 확인할 수 있습니다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PathVariableController {
// 테스트용 컨트롤러
@GetMapping("/path/{value}")
public String getPathVariableIsNull(@PathVariable(name = "value") String value) {
return value;
}
}
@PathVariable 값이 없으면 404 Not Found 응답을 반환합니다.
@PathVariable(required = false) 사용 방법
@PathVariable 값이 없어도 괜찮을 때, required 옵션을 사용해서 null 값을 받을 수 있었습니다.
// required=false 확인용 API 추가
@GetMapping("/path/required-false/{value}")
public String getPathVariableRequiredFalse(@PathVariable(name = "value", required = false) String value) {
return value;
}
예전 버전에서는 required=false를 쓰면 적용이 되었던것 같은데, 지금 버전에서는 동작하지 않습니다.
스프링부트 2.7.18 버전에서도 required=false가 동작하지 않습니다.
그래서 다음과 같이 사용하도록 권장하고 있습니다.
// 최신 버전
@GetMapping(value = {"/path/required-false", "/path/required-false/{value}"})
public String getPathVariableRequiredFalse(@PathVariable(name = "value", required = false) String value) {
return value == null ? "Value is null" : value;
}
@PathVariable이 있는 경로와 없는 경로 둘다 매핑해야 합니다.