(3) Spring Official Guide - Consuming a RESTful Web Service

HEYDAY7·2022년 10월 26일
0

Learn Kotlin + Spring

목록 보기
4/25
post-custom-banner

시작하며

이번엔 바로 이어서 Consuming a RESTful Web Service, 말 그대로 restful api를 직접 코드적으로 활용하는 방법을 알아본다.

Consuming a RESTful Web Service

guide 주소

간단한 한줄 요약

HTTP 통신으로 받은 json을 프로젝트의 Entity로 받을 수 있다는 것을 알아본다.

프로젝트 시작

지난 글과 동일하게 간단하게 작성한다.

Dependencies

  • Spring Web
  • Spring Data JPA
  • H2 Database

Entity

가이드에서 제공하는 api가 작동하지 않아서 따로 android 프로젝트 용으로 받았던 TMDB api key를 이용해서 가이드를 진행했다.

@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
data class Movie(
        val adult: Boolean,
        @OneToMany val genres: List<Genre>,
        @Id val id: Long? = null
)

@Entity
data class Genre(
        @Id val id: Long,
        val name: String
)


사용하려고 하는 api의 return type을 사진으로 첨부한다. 간단하게 처리하기 위해서 adult와 genres 만을 살렸고, @JsonIgnoreProperties(ignoreUnknown = true)을 통해서 다른 property들이 무시되게 만들었다.

Entity들이 관계가 있을 경우 관계 annotation을 당연하게도 꼭 써줘야 한다. 실수를 했어서 남겨둔다.

Application.kt 수정

application에서 밖으로 HTTP Get을 쏘기 위해 RestTemplate라는 라이브러리를 사용한다. 이 부분에서 삽질이 들어갔지만 결국 작성한 코드는 아래와 같다.

@Configuration
@SpringBootApplication
@EnableConfigurationProperties(Properties::class)
class ConsumingARestfulWebServiceApplication(
	private val properties: Properties
) {
	val log: Logger = LoggerFactory.getLogger(ConsumingARestfulWebServiceApplication::class.java)

	@Bean
	fun restTemplate(builder: RestTemplateBuilder): RestTemplate = builder.build()

	@Bean
	fun run(restTemplate: RestTemplate): CommandLineRunner = CommandLineRunner {
		val movie = restTemplate.getForObject(
				"https://api.themoviedb.org/3/movie/550?api_key=${properties.key}", Movie::class.java
		)
		log.info(movie.toString())
	}
}

fun main(args: Array<String>) {
	runApplication<ConsumingARestfulWebServiceApplication>(*args)
}

@Configuration과 @EnableConfigurationProperties(Properties::class)는 api_key를 감추기 위해 application.properties를 사용하면서 추가하였다.

실제적으로 코드는 간단하다. restTemplate를 사용해 api를 통해 받은 json을 Object class로 바꿔서 받는다. 그리고 해당 결과가 잘 받아졌는지 확인하기 위해 log를 통해 결과를 확인한다.

Run and Test

실제로 코드에서 쏜 api에서 return 되는 값은 다음과 같다. (Insomnia를 통해 확인했다.)

그리고 실제로 log를 통해 찍혀나온 값은 다음과 같다. 보면 Movie class 부터 여러 Genre class까지 성공적으로 생성된 것을 볼 수 있다.

마무리

당연한 작업이긴 했지만 restTemplate이라거나 얻어가는게 조금 있었다. 반복적으로 RESTful 한 case를 알려줘서 좀 더 친숙해졌다~ 정도일 것 같다.
작성한 코드는 다음과 같다.

profile
(전) Junior Android Developer (현) Backend 이직 준비생
post-custom-banner

0개의 댓글