Spring · SpringBoot 공식 가이드를 kotlin으로 해보세요 ~ 외부 API 호출 ~

소개



이 시리즈에서는 Spring · SpringBoot 공식 가이드를 참고로 Kotlin에서 튜토리얼을 실시합니다.

이번에는 외부 API 호출을 기반으로 명령 줄에서 두드리는 API 클라이언트를 만듭니다.

완성품 소스 코드는 이쪽

시리즈 기사



시리즈 기사 일람

필요한 환경


  • JDK1.8 이상
  • Gradle4 이상
  • Sprint Tool Suite 또는 InteliJ IDEA
  • Kotlin

  • Spring Initializr



    Spring Initializr에서 초기 모듈을 다운로드합니다.

    다음과 같은 느낌으로. 필요한 종속성은 Spring Web뿐입니다.



    다운로드가 완료되면 IDE로 가져오십시오.

    데이터를 저장하는 도메인 클래스 만들기



    이번에는 이 API를 사용합니다.
    {"type":"success","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."}}
    

    좋은 느낌으로 무작위 값이 돌아옵니다.

    그럼 먼저 위의 형식의 Josn 데이터를 저장하는 도메인 클래스를 만듭니다.

    src/main/kotlin/com/example/ktconsumingrest/Quote.kt
    package com.example.ktconsumingrest
    
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties
    
    @JsonIgnoreProperties
    class Quote(
        var type: String,
        var value: Value
    ) {
        override fun toString(): String {
            return "Quote{" +
                    "type='" + type + '\'' +
                    ", value=" + value +
                    '}';
        }
    }
    

    src/main/kotlin/com/example/ktconsumingrest/Value.kt
    package com.example.ktconsumingrest
    
    class Value(
        var id: Long,
        var quote: String
    ) {
        override fun toString(): String {
            return "Value{" +
                    "id=" + id +
                    ", quote='" + quote + '\'' +
                    '}';
        }
    }
    

    API 호출 부분 만들기



    spring boot의 메인 클래스, @SpringBootApplication 어노테이션이있는 클래스를 다음과 같이 편집합시다 (이 예에서는 KtConsumingRestApplication.kt)

    src/main/kotlin/com/example/ktconsumingrest/KtConsumingRestApplication.kt
    package com.example.ktconsumingrest
    
    import org.slf4j.LoggerFactory
    import org.springframework.boot.autoconfigure.SpringBootApplication
    import org.springframework.boot.runApplication
    import org.springframework.context.annotation.Bean
    import org.springframework.web.client.RestTemplate
    import org.springframework.boot.CommandLineRunner
    import org.springframework.boot.web.client.RestTemplateBuilder
    
    
    
    @SpringBootApplication
    class KtConsumingRestApplication {
    
        private val logger = LoggerFactory.getLogger(KtConsumingRestApplication::class.java)
    
        @Bean
        fun restTemplate(builder: RestTemplateBuilder): RestTemplate {
            return builder.build()
        }
    
        @Bean
        @Throws(Exception::class)
        fun run(restTemplate: RestTemplate) = CommandLineRunner {
            val quote = restTemplate.getForObject(
                    "https://gturnquist-quoters.cfapps.io/api/random",
                        Quote::class.java)
            logger.info(quote!!.toString())
        }
    }
    
    fun main(args: Array<String>) {
        runApplication<KtConsumingRestApplication>(*args)
    }
    

    실행하다



    빌드합니다. 이번에는 실행 가능한 항아리를 준비하고 여기를 두드려 응용 프로그램을 실행합니다.

    응용 프로그램의 루트 디렉토리에서 다음 명령을 실행합니다.
    $ ./gradlew build
    

    jar를 실행합니다.
    $ java -jar build/libs/kt-consuming-rest-0.0.1-SNAPSHOT.jar
    
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.2.1.RELEASE)
    
    2019-11-10 11:23:35.318  INFO 49218 --- [           main] c.e.k.KtConsumingRestApplicationKt       : Starting KtConsumingRestApplicationKt on LAB-N1253.local with PID 49218 (/develop/learn/spring/kotlin-spring-guides/kt-consuming-rest/build/libs/kt-consuming-rest-0.0.1-SNAPSHOT.jar started by ishizukayusuke in /develop/learn/spring/kotlin-spring-guides/kt-consuming-rest)
    2019-11-10 11:23:35.322  INFO 49218 --- [           main] c.e.k.KtConsumingRestApplicationKt       : No active profile set, falling back to default profiles: default
    2019-11-10 11:23:36.772  INFO 49218 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
    2019-11-10 11:23:36.788  INFO 49218 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
    2019-11-10 11:23:36.788  INFO 49218 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.27]
    2019-11-10 11:23:36.872  INFO 49218 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
    2019-11-10 11:23:36.872  INFO 49218 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1441 ms
    2019-11-10 11:23:37.126  INFO 49218 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
    2019-11-10 11:23:37.324  INFO 49218 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
    2019-11-10 11:23:37.332  INFO 49218 --- [           main] c.e.k.KtConsumingRestApplicationKt       : Started KtConsumingRestApplicationKt in 2.656 seconds (JVM running for 3.223)
    2019-11-10 11:23:38.796  INFO 49218 --- [           main] c.e.k.KtConsumingRestApplication         : Quote{type='success', value=Value{id=3, quote='Spring has come quite a ways in addressing developer enjoyment and ease of use since the last time I built an application using it.'}}
    
    Quote{type='success', value=Value{id=3, quote='Spring has come quite a ways in addressing developer enjoyment and ease of use since the last time I built an application using it.'}}
    

    ↑ 부분이 API 호출 결과가 됩니다.

    좋은 웹페이지 즐겨찾기