From 2bf88262b73fa6aeefaf0eecb5fefe2bd6c67016 Mon Sep 17 00:00:00 2001 From: Colt Date: Fri, 28 Oct 2022 20:06:20 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20FeignClient=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpringCloudOpenFeignApplication.kt | 2 ++ .../configuration/FeignConfiguration.kt | 15 +++++++++++++ .../com/banjjoknim/springcloudopenfeign/domain/Post.kt | 8 +++++++ .../springcloudopenfeign/domain/PostClient.kt | 15 +++++++++++++ .../springcloudopenfeign/domain/PostController.kt | 21 +++++++++++++++++++ 5 files changed, 61 insertions(+) create mode 100644 놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/configuration/FeignConfiguration.kt create mode 100644 놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/Post.kt create mode 100644 놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/PostClient.kt create mode 100644 놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/PostController.kt diff --git a/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/SpringCloudOpenFeignApplication.kt b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/SpringCloudOpenFeignApplication.kt index 45f98b0..d80c147 100644 --- a/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/SpringCloudOpenFeignApplication.kt +++ b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/SpringCloudOpenFeignApplication.kt @@ -2,7 +2,9 @@ package com.banjjoknim.springcloudopenfeign import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication +import org.springframework.cloud.openfeign.EnableFeignClients +@EnableFeignClients @SpringBootApplication class SpringCloudOpenFeignApplication diff --git a/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/configuration/FeignConfiguration.kt b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/configuration/FeignConfiguration.kt new file mode 100644 index 0000000..02a1512 --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/configuration/FeignConfiguration.kt @@ -0,0 +1,15 @@ +package com.banjjoknim.springcloudopenfeign.configuration + +import com.fasterxml.jackson.databind.DeserializationFeature +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer +import org.springframework.context.annotation.Configuration +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder + +@Configuration +class FeignConfiguration : Jackson2ObjectMapperBuilderCustomizer { + override fun customize(jacksonObjectMapperBuilder: Jackson2ObjectMapperBuilder) { + jacksonObjectMapperBuilder + .featuresToEnable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL) + .featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + } +} diff --git a/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/Post.kt b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/Post.kt new file mode 100644 index 0000000..bb43f31 --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/Post.kt @@ -0,0 +1,8 @@ +package com.banjjoknim.springcloudopenfeign.domain + +data class Post( + val userId: Long, + val id: Long, + val title: String, + val completed: Boolean +) diff --git a/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/PostClient.kt b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/PostClient.kt new file mode 100644 index 0000000..e37a6bb --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/PostClient.kt @@ -0,0 +1,15 @@ +package com.banjjoknim.springcloudopenfeign.domain + +import org.springframework.cloud.openfeign.FeignClient +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable + +@FeignClient(value = "postClient", url = "https://jsonplaceholder.typicode.com/") +interface PostClient { + + @GetMapping("/posts") + fun findPosts(): List + + @GetMapping("/posts/{postId}") + fun findPost(@PathVariable postId: Long): Post +} diff --git a/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/PostController.kt b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/PostController.kt new file mode 100644 index 0000000..4d4823f --- /dev/null +++ b/놀이터(예제 코드 작성)/spring-cloud-open-feign/src/main/kotlin/com/banjjoknim/springcloudopenfeign/domain/PostController.kt @@ -0,0 +1,21 @@ +package com.banjjoknim.springcloudopenfeign.domain + +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.RestController + +@RestController +class PostController( + private val postClient: PostClient +) { + + @GetMapping("/posts") + fun posts(): List { + return postClient.findPosts() + } + + @GetMapping("/posts/{postId}") + fun post(@PathVariable postId: Long): Post { + return postClient.findPost(postId) + } +}