인프런 커뮤니티 질문&답변

도토리님의 프로필 이미지
도토리

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

HTTP 요청 파라미터 - @RequestParam

Integer age에 age=""를 넘기는 경우

작성

·

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

안녕하세요. 도토리님, 공식 서포터즈 OMG입니다.

@RequestMapping으로 @RequestMapping("/request-param-required") 하셨기 때문에 브라우저에서 접속한다면 GET요청이 발생하고 이 때 required true로 지정한 파라미터가 없으면 아래 오류가 발생합니다.(400에러)

image

그리고 int가 아닌 Integer와 같은 래퍼타입의 경우 primitive 타입과 다르게 (래퍼) 클래스이므로 null이 가능하며 값을 지정하여 넘어오지 않을 경우 null로 세팅됩니다.

감사합니다.

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 값으로 인식되어 처리됩니다.

이러한 동작 방식은 다음 질문에서 다루어진 내용과 매우 유사합니다:

이 정보를 바탕으로, 도토리님이 겪고 계신 현상은 스프링 프레임워크의 기대되는 동작 방식입니다. age 파라미터가 빈 문자열로 요청될 때 Integer 타입은 null 값을 할당받게 됩니다. 이는 스프링이 기본 타입(int, double 등)이 아닌 래퍼 클래스(Integer, Double 등)에 대해 null 값을 허용하기 때문입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

도토리님의 프로필 이미지
도토리

작성한 질문수

질문하기