초이로그

UriComponentsBuilder: builder() vs. builder(encoded) 본문

Spring

UriComponentsBuilder: builder() vs. builder(encoded)

수연초이 2021. 8. 2. 03:59

Google의 Place API를 호출하기 위해 사용중이었는데 코드리뷰에서 이 둘의 차이를 묻는 질문이 들어왔다.

이전에 찾았을땐 단순히 인코딩을 하냐 안하냐의 차이라고 슥 보고 넘어갔었지만 다시한번 찾아보는 계기가 되었다.

 

일단 UriComponentsBuilder클래스에 들어가보면 두가지 빌더 메소드가 있다는 것을 확인할 수 있다.

 

하나는 매개변수가 없는 build(). 그리고 encoded라는 매개변수를 갖는 build(boolean encoded)이다. 정리해보자면, 

 

build()

해당 빌더에 포함된 다양한 컴포넌트로부터 UriComponents 인스턴스를 빌드한다.

 

build(boolean encoded)

build()의 변형. 이미 컴포넌트가 완전히 인코딩된 경우의 UriComponents 인스턴스를 생성하기 위해 사용한다.

빌더가 fromUri를 통해 생성된 경우에 유용하다.

 

fromUri(URI uri)

매개변수에서 주어진 URI에서 초기화된 빌더를 생성한다.

빌더의 컴포넌트들은 FULLY_ENCODED 형식이어야하므로 build(true)를 명시하여 UriComponents 인스턴스를 빌드하여 컴포넌트가 인코딩되었음을 표시하는 것이 좋다.

 

 

결국, fromUri를 사용했다면 build(true)를 명시해달라는 이야기였다!

 

추가 참고: Spring 공식 문서(https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/UriComponentsBuilder.html#build--)