Study/spring

[Java] Spring @PathVariable null 값 유효성 검사 방법

 

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에 값이 없을 때
@PathVariable에 값이 없을 때

@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를 쓰면 적용이 되었던것 같은데, 지금 버전에서는 동작하지 않습니다.

(참고: https://howtodoinjava.com/spring-mvc/optional-pathvariable/#2-1-using-pathvariablerequired-false-spring-4-3-3)

스프링부트 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(required=false) 적용
@PathVariable(required=false) 적용

@PathVariable이 있는 경로와 없는 경로 둘다 매핑해야 합니다.