
1. 요청 파아미터와 @RequesParam
- 요청 처리 메서드: 요청 URL에 포함된 파라미터 값을 전달받아 처리
- @RequesParam
1. 요청 파아미터
- GET형태의 쿼리문을 '이름=값(name=value)' 형식으로 받음.
- 다중 쿼리문은 '&'로 구분 ( color = red & year = 2025 )
- @RequesParam로 요청 파라미터의 수가 많지 않을 때 주로 사용.
- 웹에서 요청하는 요청 파라미터와 이름이 동일해야 한다.
- 이 값이 메서드 매개변수의 데이터 타입에 따라 적절하게 변환.
- @ReauestMapping의 요청 매칭 경로에 포함된 요청 파아미터 값을 메서드의 매개변수로 정달받음.
@ReauestMapping("요청 경로")
public String 메서드_이름 (@RequestParam("요청_파라미터"), ...) {}
// public String 메서드_이름 (@RequestParam(value = "요청_파라미터"), ...) {}
2. @RequesParam 속성
- defaultValue(String): 요청 파라미터가 없을때, 기본값
- name(String): 요청 파라미터 이름
- required(boolean): 요청 파라미터의 필수 여부
- value(String): name의 별칭
// URL = http://.../exam01?id=admin&passwd=admin1234
package com.springboot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;
@Controller
public class Example01Controller {
@RequestMapping("/exam01")
public String requestMethod(
@RequestParam(value = "id", defaultValue="관리자") String userId,
@RequestParam("passwd") String userPw,
Model model) {
model.addAttribute("data1", "@RequestParam 예제");
model.addAttribute("data2", "요청 파라미터 id 값 : " + userId + "<br>요청 파라미터 passwd 값 : " + userPw);
return "viewPage";
}
}
/*
id = admin (없으면 "관리자")
passwd = admin1234
*/
/*
출력
@RequestParam 예제
요청 파라미터 id 값 : admin
요청 파라미터 passwd 값 : admin1234
*/
데이터(변수)에 <b>안녕</b>이라는 값이 들어있다고 가정해 보세요.
- th:text
- HTML 태그를 글자 그대로 보여줍니다.
- 결과: 화면에 <b>안녕</b>이라고 나옵니다.
- th:utext
- HTML 태그를 번역(실행)해서 보여줍니다.
- 결과: 화면에 안녕 (굵은 글씨)이라고 나옵니다.
th:text는 안전하게 글자만 보여주고, th:utext는 HTML 태그를 적용시켜 줍니다.
2. 경로 변수와 @PathVariable
- 웹 URL의 파라미터를 전달받는 경로를 처리하는 매개변수
- @PathVariable
1. 경로 변수
- 경로 변수: 웹 요펑 URL에 포함된 파라미터 값을 전달 받을 때 사용하는 변수
// URL = http:// .../car/red
...
@GetMapping("/car/color")
public String PathMethod(@PathVariable("color") String param1, ...)
{
...
return "carPage";
}
}
// color은 red값을 전달 받습니다.
2. @PathVariable로 경로 변수 처리
- 요청 처리 메서드의 매개변수를 전달받는다.
- 요청처리 메서드의 매개변수의 데이터 타입과 일치해야 한다.
@RequestMapping(..../{경로_변수})
public String 메서드_이름(@PathVariable ("경로_변수") 매개변수타입....) {}
// public String 메서드_이름(@PathVariable (value = "경로_변수") 매개변수타입....) {
@PathVariable
// URL = http://.../exam04/id=admin/passwd=admin1234
...
@Controller
public class Example03Controller {
@GetMapping("/exam03/{id}/{passwd}")
public String requestMethod(@PathVariable("id") String userId,
@PathVaruable("passwd") String userPw, Model model) {
model.addAttribute("data1", "@PathVariable 예제");
model.addAttribute("data2", "경로 변수 id값: " + userId "<br> 경로 변수passwd값: " + userPw);
return "viewPage";
}
}
/*
출력
@PathVariable 예제
경로 변수 id값: admin
경로 변수passwd값: admin1234
*/
3. 매트릭스 변수와 @MatrixVariable
- 웹 요청이 다중 파라미터 값을 받을 때 처리
- @MatrixVariable
1. 매트릭스 변수
- 요청 URL 에서 파라미터 값을 전달 받지만, 세미콜론(;)이나 콤마(,)로 다중 데이터 구분
// URL = http://.../cars/mycar;color=red;year=2024
@Controller
public class CarController {
...
@GetMapping("/cars/{info}")
public String matrixMethod(
@MatrixVariable(pathVar="color") String param1,
@MatrixVariable(pathVar="year") String param2
) {
...
return "carPage";
}
}
2. @MatrixVariable로 매트릭스 변수 처리
@RequestMapping("{경로변수}")
public String 매서드_이름( @MatrixVariable("매트릭스_변수") 매개변수,...){}
// public String 매서드_이름( @MatrixVariable(value = "매트릭스_변수") 매개변수,...){}
@MatrixVariable의 속성
- defaultValue(String): 요청 파라미터가 없을때, 기본값
- name(String): 요청 파라미터 이름
- pathVar(String): URI 경로 변수의 이름으로, 경로 구분에서 동일한 이름을 명확하게 구분할 떄 사용
- required(boolean): 매트릭스 변수의 필요 여부
- value(String): name=value애서 name을 가르킴
// URL = http://.../exam06/admin;passwd=admin1234/user/hong;passwd=hong1004
...
@Controller
public class Example06Controller {
@GetMapping("/exam06/{id1}/user/{id2}")
public String requestMethod(
@PathVariable("id1") String userId1,
@MatrixVariable(value="passwd", pathVar="id1") String userPw1,
@PathVariable("id2") String userId2,
@MatrixVariable(value="passwd",defaultValue="admin123" pathVar="id2") String userPw2,
Model model) {
model.addAttribute("data1", "@MatrixVariable 예제");
model.addAttribute("data2",
"경로 변수 id1 값 : " + userId1 + " + 매트릭스 변수 passwd 값 : " + userPw1 + "<br>" +
"경로 변수 id2 값 : " + userId2 + " + 매트릭스 변수 passwd 값 : " + userPw2);
return "viewPage";
}
}
/*
출력
@MatrixVariable 예제
경로 변수 id1값: admin 매트릭스 변수 passwd값: admin1234
경로 변수 id2값: hong 매트릭스 변수 passwd값: hong1234
*/
// URL = http://.../exam08/admin;passwd=admin1234;name=관리자/user/hong;passwd=hong1004;name=홍길순
...
@Controller
public class Example08Controller {
@GetMapping("/exam08/{id1}/user/{id2}")
public String requestMethod(
@MatrixVariable MultiValueMap<String String> var1,
@MatrixVariable(pathVar="id2") MultiValueMap<String String> var2,
Model model) {
model.addAttribute("data3", var1 + "<p>"+var2)
return "viewPage";
}
}
/*
출력
@MatrixVariable 예제
{passwd=[hong1004, admin1234], name=[홍길돌, 관리자]}
{passwd=[hong1004], name=[홍길돌]}
*/
4. [도서 쇼핑몰] 도서상세 정보 표시하기
1. @ReauestParam으로 ID와 일치하는 도서 상세 정보 출력하기
- 도서 상세 정보 메서드 정의 & 작성
- 도서 상세 정보 가져오는 메서드 정의 & 작성
- 도서 상세 정보 가져오는 요청 처리 메서드 생성
- 도서 상세 정보 버튼 작성
- 도서 상세 정보 페이지 작성

2. @PathVariavle로 분야 일치하는 도서 목록 출력하기
- 도서 분야를 가져오는 메서드 정의 & 작성 (BookRepository)
- 도서 분야를 가져오는 메서드 정의 & 작성 (BookService)
- 도서 분야를 가져오는 요청 처리 메서드 정의 & 작성 (BookController)
- 도서 분야를 갖오는 뷰 페이지 작성 (books.html)

3. MatrixVariable로 분야와출판사가 일치하는 도서 목록 출력하기
- 도서 분야와 출판사를 가져오는 메서드 정의 & 작성 (BookRepository)
- 도서 분야를 출판사를 가져오는 메서드 정의 & 작성 (BookService)
- 도서 분야를 출판사를 가져오는 요청 처리 메서드 정의 & 작성 (BookController)

연습문제
문제 01. 다음 중 컨트롤러의 요청 처리 메서드를 구현할 때 가장 많이 사용하며 요청 파라미터의 수가 많지 않을 때 사용하는 애너테이션으로 옳은 것은?
(1) @PathVariable (2) @MatrixVariable (3) @RequestParam (4) @RequestMapping
✅ 정답: (3) @RequestParam
문제 02. 다음 중 웹 요청 URL에 포함된 쿼리문을 처리하는 요청 처리 메서드의 파라미터에 사용하는 애너테이션으로 옳은 것은?
(1) @PathVariable (2) @MatrixVariable (3) @RequestParam (4) @RequestMapping
✅ 정답: (3) @RequestParam
문제 03. 다음 중 요청 처리 메서드에 포함된 다양한 요청 조건과 파라미터에 사용된 경로 변수에 대한 설명으로 옳지 않은 것은?
✅ 정답: (1) 웹 요청 URL에 포함된 파라미터 값을 전달받는 변수입니다.
문제 04. 다음 중 요청 처리 메서드의 파라미터에 사용하는 애너테이션으로 옳은 것은?
(1) @PathVariable (2) @MatrixVariable (3) @RequestParam (4) @RequestMapping
✅ 정답: (2) @MatrixVariable
문제 05. 다음 중 요청 처리 메서드에 포함된 다양한 요청 조건과 파라미터에 사용되는 매트릭스 변수에 대한 설명으로 옳지 않은 것은?
✅ 정답: (3) 매트릭스 변수가 여러 개일 경우 콤마(,)로 구분하지만 변수 이름을 반복하여 사용할 수 없습니다.
문제 08. 다음 중 웹 브라우저의 주소 창에 http://localhost:8080/movies/FindingNemo를 입력하여 매핑하는 요청 처리 메서드로 옳은 것은?
(1) requestBooks(...) (2) requestMovies01(...) (3) requestMovies02(...) (4) 없음
✅ 정답: (4) 없음
문제 09. 다음 중 웹 브라우저의 주소 창에 http://localhost:8080/movies/?title=FindingNemo를 입력하여 매핑하는 요청 처리 메서드로 옳은 것은?
(1) requestBooks(...) (2) requestMovies01(...) (3) requestMovies02(...) (4) 없음
✅ 정답: (4) 없음
문제 10. 다음 코드를 보고 웹 브라우저의 주소 창에 http://localhost:8080/movies/FindingNemo;genre=animation을 입력하면 콘솔에 출력될 실행 결과를 작성하시오.
package com.springboot.controller;
@Controller
public class MyController {
@GetMapping("/movies/{title}")
public String requestMovies03(@PathVariable("title") String title,
@MatrixVariable("genre") String genre, Model model) {
System.out.println("영화 제목: " + title);
System.out.println("영화 분야: " + genre);
return "movies";
}
}
영화 제목: FindingNemo
영화 분야: animation
출처 : 송미영, 『 스프링부트 완전정복: 개념부터 실정 프로젝트까지 』길벗캠퍼스 (2024).
'DEVELOPMENT > Spring' 카테고리의 다른 글
| [스프링부트 완전정복] 6. 폼 태그 (0) | 2025.11.03 |
|---|---|
| #2 트러블 슈팅 [스프링부트 완전정복] 6장 실습2 (0) | 2025.11.03 |
| #1 트러블 슈팅 [스프링부트 완전정복] 5장 실습1 (0) | 2025.11.02 |
| [스프링부트 완전정복] 4. 컨트롤러 구현 (1) | 2025.10.08 |
| [스프링부트 완전정복] 3. 스프링 부트의 구조 (2) | 2025.10.01 |