요청 파라미터 처리
스프링 컨트롤러에서 요청 파라미터를 처리하는 방법에 대해 다룬다.
요청 파라미터란
요청 파라미터(Request Parameter)란 사용자가 요청한 주소에 포함되어 있는 데이터를 말한다.
다음 두 페이지는 같은 페이지이지만 내용상의 차이가 있다.
좌측과 우측의 주소를 살펴보면 다음과 같다
(좌) - https://www.sysout.co.kr/home/search?k=java
(우) - https://www.sysout.co.kr/home/search?k=python
주소를 보면 ?
기호가 있고, 뒷 부분인 빨간 글자에는 =
로 두 개의 글자가 연결되어 있다. ?
앞부분이 요청 주소이고, ?
뒷부분의 글자는 요청 파라미터이다. 컨트롤러에서는 해당 주소의 처리를 위해 파라미터를 수신할 수 있어야 한다.
프로젝트 생성
boot03parameter
프로젝트를 생성한다.
컨트롤러 생성
src/main/java
에 com.hacademy.boot03
패키지를 만들고 DemoController
를 생성한다.
매핑 생성
파라미터를 불러올 수 있는 매핑을 생성하는 방법은 여러 가지가 있다.
HttpServletRequest 사용
@RequestParam 사용
@ModelAttribute 사용
예제에서는 String
타입의 name 파라미터와 int
타입의 score 라는 항목을 파라미터로 수신하는 방법에 대해서 살펴본다. 다음과 같은 모양의 주소를 처리하도록 구성한다.
http://localhost:8080/test?name=피카츄&score=75
HttpServletRequest
HttpServletRequest
는 사용자의 요청 정보가 담긴 요청 객체이다. 이 안에는 파라미터 뿐 아니라 클라이언트의 정보와 다양한 내장객체들이 포함되어 있다. 이 중 getParameter()
메소드를 사용하면 해당 이름에 대한 파라미터 정보를 조회할 수 있다. 없을 경우 null
이 반환된다.
JSP와 연결하지 않고 직접 수신한 내용을 화면에 출력하도록 @ResponseBody
를 추가하였다.
브라우저에서 다음 주소로 접속하여 파라미터가 정상적으로 입력되는지 확인한다.
name이 없는 경우는 null
이 출력되지만 score가 null
이라면 Integer.parseInt()
에서 오류가 발생한다.
만약 null
인 경우까지 고려해서 받고 싶다면 코드가 복잡해진다.
int는 null
을 보관할 수 없으므로 Integer
로 처리하면 없는 경우도 가능하다.
@RequestParam
Spring에서는 자동화된 방식을 지원한다. @RequestParam
을 사용하여 매개변수에서 파라미터 수신 처리를 할 수 있다.
매개변수 좌측에 @RequestParam
선언을 하여 파라미터임을 명시하면 Spring에서 해당하는 파라미터를 찾아 값을 대입한다. 필요하다면 자료형 변환도 자동으로 수행한다.
이 경우 파라미터가 존재하지 않으면 400 error가 발생한다.
만약 파라미터가 존재하지 않는 경우도 처리하고 싶다면 @RequestParam
에 옵션을 설정해야 한다.
defaultValue
옵션을 통해 기본값을 설정할 수 있다.
@ModelAttribute
@ModelAttribute
를 사용하면 객체를 이용하여 파라미터를 처리할 수 있다. 먼저 파라미터를 담을 객체의 클래스(DemoEntity
)를 생성한다.
Lombok
을 사용할 경우 setter
, getter
, toString()
등을 생략할 수 있다.
컨트롤러에 다음과 같이 매핑을 추가한다.
이 경우 파라미터가 존재하지 않아도 실행이 되며, 클래스에 기본값을 설정했다면 해당하는 값으로 초기화된다.
@ModelAttribute
로 생성한 객체는 Model
을 선언한 경우 Model 객체에 자동 추가된다.
Last updated