1. 소개

이 짧은 사용방법(예제)에서는 Thymeleaf 를 사용하여 Spring 경로 변수를 사용하여 URL을 생성 하는 방법을 배웁니다 .

URL의 일부로 값을 전달하고자 할 때 경로 변수를 사용합니다. Spring 컨트롤러에서는 @PathVariable 어노테이션을 사용하여 이러한 값에 액세스합니다 .

2. 경로 변수 사용

먼저 간단한 Item 클래스를 만들어 예제를 설정하겠습니다 .

public class Item {
    private int id;
    private String name;

    // Constructor and standard getters and setters
}

이제 컨트롤러를 만들어 보겠습니다.

@Controller
public class PathVariablesController {

    @GetMapping("/pathvars")
    public String start(Model model) {
        List<Item> items = new ArrayList<Item>();
        items.add(new Item(1, "First Item"));
        items.add(new Item(2, "Second Item"));
        model.addAttribute("items", items);
        return "pathvariables/index";
    }
    
    @GetMapping("/pathvars/single/{id}")
    public String singlePathVariable(@PathVariable("id") int id, Model model) {
        if (id == 1) {
            model.addAttribute("item", new Item(1, "First Item"));
        } else {
            model.addAttribute("item", new Item(2, "Second Item"));
        }
        
        return "pathvariables/view";
    }
}

우리에 index.html을 템플릿, 우리의 항목을 통해의 루프를하자 호출 링크를 만들 singlePathVariable 방법 :

<div th:each="item : ${items}">
    <a th:href="@{/pathvars/single/{id}(id = ${item.id})}">
        <span th:text="${item.name}"></span>
    </a>
</div>

방금 만든 코드는 다음과 같은 URL을 만듭니다.

http://localhost:8080/pathvars/single/1

이는 URL에서 표현식을 사용하기위한 표준 Thymeleaf 구문입니다.

연결을 사용하여 동일한 결과를 얻을 수도 있습니다.

<div th:each="item : ${items}">
    <a th:href="@{'/pathvars/single/' + ${item.id}}">
        <span th:text="${item.name}"></span>
    </a>
</div>

3. 다중 경로 변수 사용

이제 Thymeleaf에서 경로 변수 URL을 생성하는 기본 사항을 다루었으므로 다중 사용을 빠르게 살펴 보겠습니다.

먼저 Detail 클래스를 만들고 Item 클래스를 수정 하여 List을 만들 것입니다.

public class Detail {
    private int id;
    private String description;

    // constructor and standard getters and setters
}

다음 으로 ItemDetail List을 추가해 보겠습니다 .

private List<Detail> details;

이제 여러 @PathVariable 어노테이션을 사용하여 메서드를 추가하도록 컨트롤러를 업데이트하겠습니다 .

@GetMapping("/pathvars/item/{itemId}/detail/{dtlId}")
public String multiplePathVariable(@PathVariable("itemId") int itemId, 
  @PathVariable("dtlId") int dtlId, Model model) {
    for (Item item : items) {
        if (item.getId() == itemId) {
            model.addAttribute("item", item);
            for (Detail detail : item.getDetails()) {
                if (detail.getId() == dtlId) {
                    model.addAttribute("detail", detail);
                }
            }
        }
    }
    return "pathvariables/view";
}

마지막으로 index.html 템플릿을 수정 하여 각 세부 레코드에 대한 URL을 생성 해 보겠습니다.

<ul>
    <li th:each="detail : ${item.details}">
        <a th:href="@{/pathvars/item/{itemId}/detail/{dtlId}(itemId = ${item.id}, dtlId = ${dtl.id})}">
            <span th:text="${detail.description}"></span>
        </a>
    </li>
</ul>

4. 결론

이 빠른 사용방법(예제)에서는 Thymeleaf를 사용하여 경로 변수가있는 URL을 만드는 방법을 배웠습니다. 우리는 하나만있는 간단한 URL을 만드는 것으로 시작했습니다. 나중에 여러 경로 변수를 사용하도록 예제를 확장했습니다.

예제 코드는 GitHub에서 사용할 수  있습니다 .