java, spring

[Spring Boot | Thymeleaf] @PathVariable url 경로의 값을 변수로 받기

isaac.kim 2023. 2. 10.
728x90
반응형

[Spring Boot | Thymeleaf] @PathVariable url 경로의 값을 변수로 받기

 

이전 글

2023.02.08 - [Java & Spring/Spring Boot] - [Spring Boot | Thymeleaf] 타임리프 th:utext=""

2023.02.08 - [Java & Spring/Spring Boot] - [Spring Boot | Thymeleaf] Model, ModelAndView와 타임리프(Thymeleaf)

2023.02.06 - [Java & Spring/Spring Boot] - [Spring Boot | Thymeleaf] 타임리프 사용방법 및 시작하기

 

url 구조를 보면 다음과 같이 https://lifere.tistory.com/123 

경로에 값이 표현된 것이 있습니다.

 

위 경로 기준으로는 123이 경로의 값이라고 볼 수 있습니다.

 

제 블로그 url 뒤에 숫자를 넣으면 다른 페이지들이 보일 것입니다.

 

https://lifere.tistory.com/123 

https://lifere.tistory.com/124 

 

이처럼 url 뒤에 붙은 값에 의하여

서버 내부에서 그 값을 갖고

처리하고 있다는 것을 알 수 있는데요.

 

반응형

 

서버 내부에서는

123이 들어왔을 때 보여주는 페이지

124가 들어왔을 때 보여주는 페이지

분리하여서 화면을 보여주게 될 것입니다.

 

Spring에서는 @PathVariable 어노테이션을 사용하면

url 경로로 들어오는 값을 변수로 받아서 사용할 수가 있는데요.

이 @PathVariable 사용방법에 대해 알아보겠습니다.

 

 

1. Controller 클래스와 메서드, @PathVariable 설정하기

 

먼저, Controller 가 필요하니 Controller 클래스를 준비합니다.

 

다음은 서버에서 값을 받을 변수를 Controller의 메서드를 준비합니다.

 

 

코드 설명

@RequestMapping("/pw/{num}")는 서버로 url 요청이 '/pw/임의 값'으로

들어오는 것에 대해서 요청을 받겠다는 의미를 갖습니다.

 

http://localhost:8090/pv/123

http://localhost:8090/pv/124

이런 식으로 말이죠.

 

파라미터 Model model은 이전 글에서 다루어 왔던 객체로,

Controller에서 View로 데이터를 넘길 때 사용하는 객체입니다.

return 에는 view의 이름을 넣어서 해당 View를 요청한 사용자에게 보여줍니다.

 

 

파라미터 @PathVariable int num 를 보겠습니다.

먼저 url 설정 부분에 /pw/{num} 에서 {num} 이 부분은 임의 값으로 들어오는 Path 입니다.

임의 값을 Controller의 해당 메서드에서 파라미터로 받는 부분이

메서드의 파라미터로 설정된 @PathVariable int num 이 부분이라고 할 수 있습니다.

Path에 있는 {num} 명칭과 파라미터로 설정한 int num의 이름이 일치하게 세팅된 것을 볼 수 있는데요.

기본 설정값으로 url path의 {num} 이 부분과 @PathVariable int num 변수명이

일치하는 경우에 파라미터 변수로 자동 대입된다고 볼 수 있습니다.

 

Controller Method
요청
Console log

 

 

이름을 다르게 해서 요청하면 error가 발생하게 됩니다.

 

 

이름을 다르게 사용해야겠다면 다음과 같이 코드를 수정합니다.

 

@PathVariable(name = "num") : path에서 {num}으로 넘어오는 값을
pv1 메서드의 파라미터 int numtest로 받는다.

 

그럼 error 없이, 출력도 정상적으로 되는 것을 볼 수 있습니다.

 

 

2. Thymeleaf + html

다음은 메서드에서 return "pv1"; 을 보겠습니다.

 

resources > templates > thymeleaf 폴더에 있는 pv1.html 파일을 불러오도록 파일을 생성해주고,

pv1.html 의 화면에는 Controller에서 model에 세팅된 num 이라는 데이터를 받아서 보여주도록 합니다.

해당 pv1.html 에서 데이터 표현은 Thymeleaf 템플릿 엔진을 통해 데이터를 보이고 있습니다.

 

지난 글들에서 알아보았지만 다시 떠올려보겠습니다.

 

1) html 파일, html 태그에 thymeleaf 속성 설정

<html lang="en" xmlns:th="http://www.thymeleaf.org">

2) 태그 속성에 th:text="${변수명}" 과 같은 thymeleaf 속성을 넣어서 사용

<h1 th:text="${num}"></h1>

 

 

3. ModelAndView로 표현하기

ModelAndView는 Model과 View를 같이 세팅합니다.

위에선 Model을 사용해서 데이터만 세팅하고 View 페이지 이름을 return 했습니다.

 

ModelAndView 를 사용할 때는 어떤 차이가 있는지 다음 코드를 보면서 확인합니다.

addObject( ) 로 데이터를 세팅하고,

setViewName( ) 으로 View를 세팅하여 return 합니다.

 

html은 위에서 사용하던 pv1.html과 같은 코드를 사용한다고 했을 때,

ModelAndView를 사용하여도 다음과 같은 결과를 확인할 수 있습니다.

 

 

 

이번 글에서는 Spring Boot, @PathVariable, MVC, Model, ModelAndView에 대해 알아보았습니다.

 


도움이 되는 글 남기겠습니다.

좋아요, 구독, 광고 클릭은 큰 힘이 됩니다 :)

 

728x90
반응형