인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

kkt169님의 프로필 이미지
kkt169

작성한 질문수

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

HTTP 요청 파라미터 - @RequestParam

@RequestParam 어노테이션이 required=false인 경우, 쿼리파라미터 이름만 있고 값이 없는 경우

작성

·

981

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
Q1. 예를 들어
@RequestParam(required=false) Integer age
로 매개변수를 선언한 경우,
요청시 쿼리파라미터 정보 중 age라는 이름의 데이터는 있지만 값이 없으면, (?age=)
 
username과 같이 빈문자가 들어올 것이라고 생각하였지만,
null이 들어왔습니다.
이를 통해 쿼리파라미터의 값을 넘길 때 이름만 있고 값이 없는 경우 String으로 받으면 빈문자가 들어오고, 그외의 타입으로 받으면 null이 들어오는 것이 맞는지 궁금합니다.
 
Q2. 또한
@RequestParam(required=false) int age
매개변수를 선언한 경우,
요청시 age라는 이름의 데이터 자체가 없다면 설명해주신 것 처럼 null이 들어가는데,
int형 변수에 null을 넣을 수는 없으므로
이는 서버측 오류인 500대 오류라는것을 확인하였습니다.
 
그런데 동일 상황에서
age라는 이름의 쿼리파라미터만 있고 값이 없는 경우(?age=),
Q1과 같이 null이 넘어가고 이 null값은 int형 변수에 대입이 안되므로,
또한500대 오류가 날 것 같았는데 400대 오류가 나왔습니다. 왜 400대 오류가 나는지를 잘 모르겠습니다.
 
항상 좋은 강의 및 답변 감사합니다!!
 

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. kkt169님

우선 질문하신 부분들은 테스트 해보신 결과가 맞을거에요.

마지막 부분만 답을 드리자면

Q: age라는 이름의 쿼리파라미터만 있고 값이 없는 경우(?age=),
Q1과 같이 null이 넘어가고 이 null값은 int형 변수에 대입이 안되므로, 
이 또한500대 오류가 날 것 같았는데 400대 오류가 나왔습니다. 왜 400대 오류가 나는지를 잘 모르겠습니다.

-> age= 사실 빈 문자가 됩니다. int에는 문자를 입력할 수 없으므로 이는 HTTP 요청 스펙을 지키지 않은 것이 됩니다. 따라서 400 오류가 발생합니다.

감사합니다.

kkt169님의 프로필 이미지
kkt169

작성한 질문수

질문하기