# [spring.io]RESTful 웹 서비스 호출하기(코틀린 ver.)

#kotlin #spring

참고 사이트 : https://spring.io/guides/gs/consuming-rest/

RESTful 웹 서비스 호출하기

스프링의 RestTemplate을 사용하여 RESTful 웹 서비스를 호출하는 예제입니다.
호출할 테스트 URL 은 https://gturnquist-quoters.cfapps.io/api/random 입니다.

Spring Initializr 로 시작하기

메이븐 기준으로 다음 의존성을 추가한 프로젝트를 생성합니다.

  • Spring Web
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-kotlin</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-reflect</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib-jdk8</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

REST 리소스 가져오기

https://gturnquist-quoters.cfapps.io/api/random URL을 호출하면 다음과 같은 JSON 응답을 받아옵니다.

{
   type: "success",
   value: {
      id: 10,
      quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
   }
}

도메인 클래스 생성하기

Quote 클래스 생성

class Quote (
        val type : String,
        val value : Value
){
    override fun toString(): String {
        return "Quote{" +
                "type='" + type + '\'' +
                ", value=" + value +
                '}';

    }
}

Value 클래스 생성

class Value(
        val id: Long,
        val quote : String
) {
    override fun toString(): String {
        return “Value{“ +
                “id=“ + id +
                “, quote=‘” + quote + ‘\’’ +
                ‘}’;
    }
}

애플리케이션 생성

  • 참고 사이트에서는 RestTemplate 의 getForObject 함수를 사용하지만,
    코틀린에서는 getForObject 를 사용할 경우 코드가 조금 복잡해지기 떄문에 getForEntity를 사용합니다.
fun main() {
    val quote: ResponseEntity<Quote> = RestTemplate().*getForEntity*<Quote>(
            “https://gturnquist-quoters.cfapps.io/api/random”)
    *println*(quote.toString())
}

실행 결과

<200,Quote{type='success', value=Value{id=5, quote='Spring Boot solves this problem. It gets rid of XML and wires up common components for me, so I don't have to spend hours scratching my head just to figure out how it's all pieced together.'}},[Content-Type:"application/json;charset=UTF-8", Date:"Sat, 17 Oct 2020 14:36:41 GMT", X-Vcap-Request-Id:"ad5f0439-f4ee-42b7-495c-0c44834274d5", Content-Length:"235", Connection:"keep-alive"]>

다른 카테고리의 글 목록

Spring 카테고리의 포스트를 톺아봅니다