타임리프에서 URL을 생성할 때는 @{...} 문법을 사용하면 됩니다.
package hello.thymeleaf.basic;
import lombok.Data;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/basic")
public class BasicController {
...
@GetMapping("/link")
public String link(Model model) {
model.addAttribute("param1", "data1");
model.addAttribute("param2", "data2");
return "basic/link";
}
...
}
<!DOCTYPE html>
<html xmlns:th="<http://www.thymeleaf.org>">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>URL 링크</h1>
<ul>
<!--...1-->
<li><a th:href="@{/hello}">basic url</a></li>
<!--...2-->
<li><a th:href="@{/hello(param1=${param1}, param2=${param2})}">hello query param</a></li>
<!--...3-->
<li><a th:href="@{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})}">path variable</a></li>
<!--...4-->
<li><a th:href="@{/hello/{param1}(param1=${param1}, param2=${param2})}">path variable + query parameter</a></li>
</ul>
</body>
</html>
@{/hello(param1=${param1}, param2=${param2})}
→ /hello?param1=data1¶m2=data2
() 에 있는 부분은 쿼리 파라미터로 처리됩니다.
@{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})}
→ /hello/data1/data2
URL 경로상에 변수가 있으면 () 부분은 경로 변수로 처리됩니다.
@{/hello/{param1}(param1=${param1}, param2=${param2})}
→ /hello/data1?param2=data2
param2=${param2} 처럼 남아있는 것은 자동으로 쿼리 파라미터로 붙게 됩니다.
경로 변수와 쿼리 파라미터를 함께 사용할 수 있습니다.
<aside> ❗ 상대경로, 절대경로, 프로토콜 기준을 표현할 수도 있습니다.
참고: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#link-urls
</aside>
실행