매트릭스 변수 @MatrixVariable
경로 변수와 마찬가지로 요청 URL에 포함된 파라미터 값을 전달받는데 사용한다.
매트릭스 변수가 여러개일 경우 color=red;color=green;color=blue 또는 color=red,green,blue의 형태로 요청한다.
http://.../cars/car;color=red;year=2019 일때 매트릭스 변수 color와 year의 값은 red와 2019이다.
매트릭스 변수를 사용하기 위해서는 servlet-context.xml 파일에서
<annotation-driven enable-matrix-variables="true"/> 를 작성해야한다.
어노테이션은 @MatrixVariable로, 사용하는 방법은 경로 변수와 비슷하다.
종류 | 경로 변수 | 매트릭스 변수 |
특징 | URL 상에 key가 없고, 앞에 세미콜론(;)이 없다. | URL상에 key가 있고, 앞에 세미콜론(;)이 있다. |
예시 경로 | /categories/electronics;color=blue/products/123;size=large;brand=samsung | |
설명 | 위의 url에서 electronics와 123이 경로 변수에 해당한다. | 위의 url에서 color=blue와 brand=samsung이 매트릭스 변수에 해당한다. |
둘의 차이는 위의 표로 정리할수 있다.
경로 변수는따로 key를 지정해주지 않기 때문에 매핑의 위치를 보고 의미를 해석한다.
@GetMapping("/categories/{category}/products/{id}")
위 매핑에 따르면 electronics;color=blue는 {category}에, 123;size=large;brand=samsung은 {id}에 해당한다.
매트릭스 변수의 경우에는 명확한 키와 값이 존재하지만 키는 같고 값이 다를경우 경로 변수를 이용해서 구분하기도 한다.
@GetMapping("/categories/{category}/products/{id}")
public String requestMethod(
@MatrixVariable(value="brand", pathVar="color") String q1,
@MatrixVariable(value="brand", pathVar="size") String q2,
Model model) { ...
위와 같이 brand 라는 키의 값이 중복되어 겹칠 경우에는 경로변수를 기준으로 알맞은 값이 들어가게 할수있다.
@GetMapping("/products/{id}") // 요청값 없음
public String requestMethod(
@MatrixVariable(required=false, defaultValue="123") String q,
Model model) { ...
이 경우에는 파라미터 없이 제출을 했을때 에러페이지 대신 기본값을 설정해서 이동시키는 방법이다.
이때 required를 false로 하고, defaultValue 값을 준다.
@GetMapping("/categories/{category}/products/{id}")
public String requestMethod(
@MatrixVariable MultiValueMap<String, String> MatrixVars
@MatrixVariable(pathVar="color") MultiValueMap<String, String> matrixVars2,
Model model) { ...
위의 방법은 모든 매트릭스를 key,value 형태로 먼저 저장하고 pathVar가 color인것만 골라내는 방법이다.
요청 파라미터 @RequestParam
기존의 a태그를 이용해서 파라미터를 전달 받던 방식과 동일하다.
http://.../cars?color=red 일때 요청 파라미터 이름(key)은 color이고, 값(value)은 red이다.
@GetMapping("/cars")
public String requestMethod(@RequestParam String color, ...)
@RequestParam은 기존 JSP에서 쓰던 Request.getParameter와 비슷하다고 생각하면 된다.
/test?color=blue 라는 경로를 요청 받았을때
@GetMapping("/test")
public String requestMethod(@RequestParam String color, ...)
요청 url의 키와 변수명 키가 동일하면 따로 설정하지 않아도 color에 blue라는 값이 담긴다.
만약 키 이름이 동일하지 않을경우
/test?design=blue 라는 경로를 요청 받았을때
@GetMapping("/test")
public String requestMethod(@RequestParam("design") String color, ...)
@RequestParam뒤에 괄호와 키 이름을 붙여주면 위와 동일하게 color 변수에 blue 값이 담기게 된다.
스프링 폼 태그
스프링에서 사용하는 폼 태그로, 스프링은 JSP와 다르게 폼에서 DTO에 바로 값을 집어넣고 DTO를 리파지토리로 가져가기 때문에 기존 JSP에서 쓰던 폼과는 다른 폼을 사용한다.
이를 구분하기 위해서 스프링 폼에는 기존의 폼 앞에 <from:이 붙게된다.
<form:form>
<from:input><form:input>
<form:password></form:password>
</form:form>
또한 스프링 폼 태그를 사용하기 위해서 뷰 페이지 위쪽에 스프링 폼 태그 라이브러리를 선언해야한다.
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<form:form modelAttribute="member" method="post"> // DTO(member)와 연결
</form:form>
@ModelAttribute
스프링 폼에서 submit한 파라미터를 DTO객체에 담아주는 역할을 한다.
public String 메서드_이름(@ModelAttribute 매개변수, Model model) {
// model.addAttribute(...);
return "뷰";
}
스프링 폼에서 제출한 파라미터들은 자동으로 model에 담기게 되고, 컨트롤러에서 model.name 등으로 접근 할 수 있게된다.
컨트롤러에서 DTO객체를 만들어서 폼에 건내주면, 폼에서 파라미터를 작성해서 서밋하면 @ModelAttribute를 통해서 DTO에 저장되고, 다시 컨트롤러로 돌아와서 서비스로 이동, 서비스에서 리파지토리로 이동해서 DTO에 저장된 데이터를 꺼낼수있다.
'프로그래밍 공부' 카테고리의 다른 글
2025.03.14 스프링 공부 (0) | 2025.03.14 |
---|---|
2025.03.13 스프링 공부 (0) | 2025.03.13 |
2025.03.11 스프링 공부 (0) | 2025.03.11 |
2025.03.10 스프링 공부 (0) | 2025.03.10 |
2025.03.07 스프링 공부 (0) | 2025.03.07 |