#스프링 URI 생성 UriComponents, UriComponentsBuilder 클래스 사용 방법
#참고 소스
@Override
public String getName() {
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/api/server/name")
.queryParam("name", "jack")
.build()
.toUri();
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class);
LOGGER.info("status code : {}", responseEntity.getStatusCode());
LOGGER.info("body: {}", responseEntity.getBody());
return responseEntity.getBody();
}
@Override
public String getName2() {
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/api/server/path-variable/{name}")
.build()
.expand("jack")
.toUri();
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class);
LOGGER.info("status code : {}", responseEntity.getStatusCode());
LOGGER.info("body: {}", responseEntity.getBody());
return responseEntity.getBody();
}
@Override
public ResponseEntity<MemberDTO> addHeader() {
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/api/server/add-header")
.build()
.toUri();
MemberDTO memberDTO = new MemberDTO();
memberDTO.setName("jack");
memberDTO.setEmail("jack@naver.com");
memberDTO.setOrganization("Around Hub Studio");
RequestEntity<MemberDTO> requestEntity = RequestEntity
.post(uri)
.header("header-key", "header-value")
.body(memberDTO);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<MemberDTO> responseEntity = restTemplate.exchange(requestEntity, MemberDTO.class);
LOGGER.info("status code : {}", responseEntity.getStatusCode());
LOGGER.info("body: {}", responseEntity.getBody());
return responseEntity;
}
#UriComponentsBuilder + newInstance()
-URI를 동적으로 생성해주는 클래스입니다.
ex) UriComponents builder = UriComponentsBuilder.newInstance()
#fromHttpUrl(String httpUrl)
-https://localhost:8080?key=apple
ex) UriComponents uri = UriComponentsBuilder.fromHttpUrl("https://localhost:8080?key={value}")
.buildAndExpand("apple");
#buildAndExpand("a&b")
-URI 템플릿 변수 설정할 수 있습니다.
-https://localhost:8080?filter={value}
ex) https://localhost:8080?filter=a&b
#scheme(String scheme)
ex) .scheme("https")
#host(String host)
ex) .host("www.naver.com")
#path(String path)
-경로를 지정할 수 있습니다.
ex) .path("https://www.naver.com")
#queryParam("key", "value")
-파라미터를 지정할 수 있습니다. (쿼리 스트링으로 지정됩니다.)
-https://www.naver.com?key=value
ex) .queryParam("key", "value")
#expand()
-복수값을 넣을 시 , 로 추가 가능합니다.
ex) /a1/b1
.path("/{a}/{b}")
.expand("a1", "b1")
#build()
-UriComponents 인스턴스를 빌드합니다.
-현재 문자열이 인코딩 되어있는지 확인(boolean)합니다.
-true일 경우 인코딩을 수행합니다.
-false(default)일 경우 인코딩을 수행하지 않습니다.
#encode(void or Charset charset)
-void일 경우 default는 UTF-8
-인코딩을 수행합니다.
#toUri()
-인코딩 수행을 하지 않습니다.
-인코딩을 하려면 .encode() 후 사용해야 합니다.
#toUriString()
-내부적으로 인코딩 수행 후 String 생성합니다.
#fromUri(URI uri)
ex) URI uri = new URI("https://localhost:8080");
UriComponents builder= UriComponentsBuilder.fromUri(uri)
#fromPath(String path)
ex) UriComponentsBuilder builder= UriComponentsBuilder.fromPath("")
#fromUriString(String uri)
ex) URI uri = UriComponentsBuilder.fromUriString("https://localhost:8080")
댓글