前提・実現したいこと
下記の要件を満たすAPIを最終的に作成しようとしています。
- リクエスト受信時、xml形式のレスポンスを返す外部のAPIを叩き、Json形式に変換しレスポンスとして返却するAPI
- 外部のAPIはspring cloud openfeignを用いて叩く
それにあたって、まずは外部APIのxml形式のレスポンスをパースし、data classとしてプログラム内に保持しようとしています。
発生している問題
下記のブログ記事等を参考に実装しているのですが、
Spring Cloud OpenFeignさわる - kagamihogeの日記
こちらの「CustomConfigration」クラスの下記部分が何をしているのか分からず、kotlinでどう書けばいいか分からず困っています。
@Configuration public class CustomConfigration { @Bean public Decoder feignDecoder() { MappingJackson2XmlHttpMessageConverter c = new MappingJackson2XmlHttpMessageConverter(); ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(c); // この処理が何をしているのか分からないです.. return new ResponseEntityDecoder(new SpringDecoder(objectFactory)); } }
こちらの処理は何をしているのでしょうか? また、kotlinにはどう書き直せばよいのでしょうか。
また、そもそも自分のやり方が見当違いであればお手数ですが教えていただけるとありがたいです。
実装中のソースコード
// SearchFeign.kt @FeignClient(value = "SearchFeign", url = "http://test", configuration = "XmlDecodeConfig.class") interface SearchFeign { @RequestMapping(method = [RequestMethod.GET], value = ["/searchItems"]) fun getSearchResult(): ResponseEntity }
// XmlDecodeConfig.kt @Configuration class XmlDecodeConfig { @Bean fun feignDecoder() : Decoder { val c = MappingJackson2XmlHttpMessageConverter() val objectFactory = //何を書けばいいのか分からない return ResponseEntityDecoder(SpringDecoder(objectFactory)) } }
// SampleRepositoryImpl.kt @Repository class SampleRepositoryImpl() : SampleRepository { @Autowired lateinit var SearchFeign: SearchFeign override fun search(): String { val response = SearchFeign.getSearchResult() return "feign test" //return response } }
data class ResponseEntity (val ResultSet: ResultSetEntity)
data class ResultSetEntity (val Result : ResultEntity)
// とりあえずResultTypeだけでも受け取れるようにしたい data class ResultEntity (val ResultType : String = "")
外部APIのレスポンスサンプル
<?xml version="1.0" ?> <ResultSet> <Result> <Request> <Query/> <uri>http://test.........</uri> <listing_restriction/> <IsSolr>1</IsSolr> </Request> <DumpUUID>0f4cb656-0a40-4872-a116-17b7ddfb0c64</DumpUUID> <Modules/> <SpaceId categoryId="1"/> <Campaign inSession="true">001</Campaign> : <ResultType>NORMAL</ResultType> : </Result> </ResultSet>
わかっていること
調べたところラムダ式の無名クラスの記法のようですが、上記のような記法は使ったことがなく自分の中で落とし込めませんでした...
Java8のラムダ式を理解する - Qiita
補足情報(FW/ツールのバージョンなど)
開発環境:IntelliJ IDEA
Java version : 11.0.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/07 02:51