Developer/Spring eGov4.0 (Java11, Tomcat9)

Spring URI 빌더 활용하기 : 동적 URL 생성

단님 2024. 11. 4. 16:51
728x90
URL 빌더 알아보기

 

Spring Framework의 org.springframework.web.util 패키지는

웹 개발에서 유용하게 사용되는 다양한 유틸리티 클래스를 제공한다.

그 중 UriComponents와 UriComponentsBuilder는 동적인 URI를 쉽게 생성할 수 있게 해 주는 클래스이다.

이를 통해 REST API, 페이지 네비게이션, 쿼리 파라미터 생성 등을 손쉽게 처리할 수 있다.

UriComponents

URI를 구성하는 각 요소(스키마, 호스트, 경로, 쿼리 파라미터 등)를 객체화한 클래스로,

URI를 재구성하거나 조작할 수 있다.

 

UriComponentsBuilder

UriComponents의 빌더 클래스이다.

URI를 생성하고, 쿼리 파라미터를 추가하거나 수정하는 등 URI 구성에 필요한 다양한 메서드를 제공한다.

 

 

예제 코드
public String makeQuery(int currentPage) {
    UriComponents uriComponents = UriComponentsBuilder.newInstance()
            .queryParam("currentPage", currentPage) // 현재 페이지를 쿼리 파라미터로 추가
            .queryParam("rowsPerPageCount", cri.getRowsPerPageCount()) // 행 개수 파라미터 추가
            .build();
    return this.mappingName + uriComponents.toString(); // 최종 URI 반환
}

 

  • UriComponentsBuilder.newInstance()
    • UriComponentsBuilder의 인스턴스를 생성.
  • queryParam(key, value)
    • .queryParam("currentPage", currentPage): URI에 currentPage라는 이름의 쿼리 파라미터와 currentPage 변수의 값을 추가.
    • .queryParam("rowsPerPageCount", cri.getRowsPerPageCount()): URI에 rowsPerPageCount라는 파라미터와 해당 값을 추가.
  • build()
    • 쿼리 파라미터를 모두 추가한 후 build() 메서드로 UriComponents 객체를 생성.
  • toString()으로 URI 반환
    • 최종적으로 URI 문자열을 반환, 이 문자열은 mappingName이라는 URI 경로와 조합.

 

 

  • 완성된 URI 형태
{mappingName}?currentPage=7&rowsPerPageCount=10

주의점:

UriComponentsBuilder는 자동으로 ?를 포함하여 쿼리 파라미터를 생성하므로 JSP 코드에서 ?를 별도로 추가하지 않아야 한다.

 

 

  • jsp 사용의 old 버젼
//old 버전
<a href="bPageList?currentPage=1&rowsPerPageCount=5">FP</a>&nbsp;
<a href="bPageList?currentPage=${pageMaker.startPageNumber-1}&rowsPerPageCount=5">&LT;</a>&nbsp;&nbsp;

 

  • jsp 사용의 new 버젼
//new 버전
<a href="${pageMaker.makeQuery(1)}">&LT;&LT;</a>&nbsp;
<a href="${pageMaker.makeQuery(pageMaker.startPageNumber-1)}">&LT;</a>&nbsp;&nbsp;

 

 

  • 검색 + 페이지네이션의 쿼리 메이커 활용
	public String makeQuery(int currentPage) {
		
		//버전 1
//		UriComponents uriComponents = UriComponentsBuilder.newInstance()
//				.queryParam("currentPage",currentPage)
//				.queryParam("rowsPerPageCount", cri.getRowsPerPageCount())
//				.build();
		
		//버전 2
		UriComponents uriComponents = UriComponentsBuilder.newInstance()
		.queryParam("currentPage",currentPage)
		.queryParam("rowsPerPageCount", cri.getRowsPerPageCount())
		.queryParam("searchType", cri.getSearchType())
		.queryParam("keyword", cri.getKeyword())
		.build();
		
		
		return this.mappingName+uriComponents.toString();
	}