요청 파라미터 처리
스프링 컨트롤러에서 요청 파라미터를 처리하는 방법에 대해 다룬다.
Last updated
스프링 컨트롤러에서 요청 파라미터를 처리하는 방법에 대해 다룬다.
Last updated
요청 파라미터(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
는 사용자의 요청 정보가 담긴 요청 객체이다. 이 안에는 파라미터 뿐 아니라 클라이언트의 정보와 다양한 내장객체들이 포함되어 있다. 이 중 getParameter()
메소드를 사용하면 해당 이름에 대한 파라미터 정보를 조회할 수 있다. 없을 경우 null
이 반환된다.
JSP와 연결하지 않고 직접 수신한 내용을 화면에 출력하도록 @ResponseBody
를 추가하였다.
브라우저에서 다음 주소로 접속하여 파라미터가 정상적으로 입력되는지 확인한다.
name이 없는 경우는 null
이 출력되지만 score가 null
이라면 Integer.parseInt()
에서 오류가 발생한다.
만약 null
인 경우까지 고려해서 받고 싶다면 코드가 복잡해진다.
int는 null
을 보관할 수 없으므로 Integer
로 처리하면 없는 경우도 가능하다.
Spring에서는 자동화된 방식을 지원한다. @RequestParam
을 사용하여 매개변수에서 파라미터 수신 처리를 할 수 있다.
매개변수 좌측에 @RequestParam
선언을 하여 파라미터임을 명시하면 Spring에서 해당하는 파라미터를 찾아 값을 대입한다. 필요하다면 자료형 변환도 자동으로 수행한다.
이 경우 파라미터가 존재하지 않으면 400 error가 발생한다.
만약 파라미터가 존재하지 않는 경우도 처리하고 싶다면 @RequestParam
에 옵션을 설정해야 한다.
defaultValue
옵션을 통해 기본값을 설정할 수 있다.
@ModelAttribute
를 사용하면 객체를 이용하여 파라미터를 처리할 수 있다. 먼저 파라미터를 담을 객체의 클래스(DemoEntity
)를 생성한다.
Lombok
을 사용할 경우 setter
, getter
, toString()
등을 생략할 수 있다.
컨트롤러에 다음과 같이 매핑을 추가한다.
이 경우 파라미터가 존재하지 않아도 실행이 되며, 클래스에 기본값을 설정했다면 해당하는 값으로 초기화된다.
@ModelAttribute
로 생성한 객체는 Model
을 선언한 경우 Model 객체에 자동 추가된다.