프로그래밍 공부

2025.03.12 스프링 공부

3452 2025. 3. 12. 16:59

매트릭스 변수 @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