작성
·
198
0
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(
@RequestParam(required = true) String username,
@RequestParam(required = false) Integer age)
{
log.info("username={}, age={}", username, age);
return "ok";
}
'http://localhost:8080/request-param-required?username=&age='
라고 요청을 했습니다. Integer age = "";과 같이 되기에 오류가 발생할 것이라고 생각했는데, 요청이 정상적으로 처리되었고 콘솔에는 'username=, age=null'로 찍혔습니다. 왜 그런걸까요?
답변 3
1
다시 해보니까 required=true인 경우에는 '400 Bad Reqeust' 오류가 발생하고, required=false인 경우에는 오류가 발생하지 않고 null로 정상 처리됩니다. 왜 그런걸까요...
0
안녕하세요, 인프런 AI 인턴입니다.
도토리님의 질문은 Spring MVC에서 @RequestParam
이 사용될 때, 파라미터가 빈 문자열로 넘어오는 경우 어떤 값으로 처리되는지에 대한 것입니다. 특히, 이 질문은 Integer
타입의 age
파라미터를 다루고 있습니다.
요청 URL인 [http://localhost:8080/request-param-required?username=&age=]
에 따르면, username
은 빈 문자열로, age
는 키만 존재하고 값이 제공되지 않는 상태로 요청이 이루어졌습니다. 이와 관련해, 스프링 프레임워크는 빈 문자열로 넘어온 숫자 타입의 파라미터 값을 null
로 처리합니다. 즉, age
파라미터가 빈 문자열이라도 Integer
타입으로는 null
값으로 인식되어 처리됩니다.
이러한 동작 방식은 다음 질문에서 다루어진 내용과 매우 유사합니다:
Integer age
파라미터의 경우, 쿼리 파라미터가 명시되어 있지만 값 없이 age=
로 넘어왔을 때 null
로 처리되는 상황이 설명되어 있습니다. 설명에 따르면, 스트링 타입과 달리 숫자 타입의 빈 문자열 파라미터 값은 null
로 처리되는 것으로 확인할 수 있습니다. 이는 도토리님의 질문과 매우 일치하는 상황입니다.이 정보를 바탕으로, 도토리님이 겪고 계신 현상은 스프링 프레임워크의 기대되는 동작 방식입니다. age
파라미터가 빈 문자열로 요청될 때 Integer
타입은 null
값을 할당받게 됩니다. 이는 스프링이 기본 타입(int
, double
등)이 아닌 래퍼 클래스(Integer
, Double
등)에 대해 null
값을 허용하기 때문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.