Integer age에 age=""를 넘기는 경우
329
작성한 질문수 92
@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에러)

그리고 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 값으로 인식되어 처리됩니다.
이러한 동작 방식은 다음 질문에서 다루어진 내용과 매우 유사합니다:
- @RequestParam 어노테이션이 required=false인 경우, 쿼리파라미터 이름만 있고 값이 없는 경우: 이 질문에서는
Integer age파라미터의 경우, 쿼리 파라미터가 명시되어 있지만 값 없이age=로 넘어왔을 때null로 처리되는 상황이 설명되어 있습니다. 설명에 따르면, 스트링 타입과 달리 숫자 타입의 빈 문자열 파라미터 값은null로 처리되는 것으로 확인할 수 있습니다. 이는 도토리님의 질문과 매우 일치하는 상황입니다.
이 정보를 바탕으로, 도토리님이 겪고 계신 현상은 스프링 프레임워크의 기대되는 동작 방식입니다. age 파라미터가 빈 문자열로 요청될 때 Integer 타입은 null 값을 할당받게 됩니다. 이는 스프링이 기본 타입(int, double 등)이 아닌 래퍼 클래스(Integer, Double 등)에 대해 null 값을 허용하기 때문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
servlet과 container에 대한 질문입니다
0
21
1
api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?
0
62
1
jsp 의존성 수정 요청
0
75
2
요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?
0
142
1
save() 메서드 문의
0
65
1
절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상
0
99
1
request-body-json
0
83
2
MVC 패턴의 적용 단위
0
94
1
RequestMapping을 이용한 핸들러, 어댑터
0
118
2
save 후 결과화면
0
86
2
jsp를 이용한 view
0
97
1
application.properties에 debug 추가해도 결과가 똑같습니다.
0
175
1
수업 코드 제공 관련 문의
0
97
2
RequestMappingHandlerAdapter의 Controller 호출 과정
0
98
3
파일 오픈 시
0
68
1
스프링 배치 관련
0
77
1
@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부
0
112
1
postman으로 /request-body-json-v1 호출시 500 error
0
94
1
프론트엔드와 백엔드의 mvc, rest api에 대한 질문
0
77
1
모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문
0
111
1
console log 출력 관련 질문입니다.
0
73
1
애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ
0
138
1
html 변경하는 부분 적용 문제
0
100
1
한글 깨짐
0
76
2





