본문 바로가기
IT/Spring

[Spring] - 스프링 URI 생성 UriComponents, UriComponentsBuilder 클래스 사용 방법

by 차이나는 개발자 2022. 6. 28.
728x90
반응형

#스프링 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")

 

 

 

728x90
반응형

댓글