[SpringBoot/KotlinでBFF]”Unable to use auto-configured MockRestServiceServer since MockServerRestTemplateCustomizer has not been bound to a RestTemplate”の解決

RestTemplateのunitTestを作成して実行した時に以下のエラーが発生した場合の対応

java.lang.IllegalStateException: Unable to use auto-configured MockRestServiceServer since MockServerRestTemplateCustomizer has not been bound to a RestTemplate

対応
RestTemplateの使い方が良くなかった様で、RestTemplateを使用するクラスにRestTemplateBuilderを引数とするコンストラクターを用意してRestTemplateのインスタンスを作成するようにして解決することができた。

AsIs

@Repository
class TaskRepository {

    fun getTask(taskId: Int): Task? {
        val restTemplate = RestTemplate()

        val uri = "http://localhost:50000/tasks/$taskId"

        return restTemplate.getForObject(uri, Task::class)
    }
}

ToBe

@Repository
class TaskRepository(restTemplateBuilder: RestTemplateBuilder) {

    private var restTemplate: RestTemplate? = null

    init {
        restTemplate = restTemplateBuilder.build()
    }

    fun getTask(taskId: Int): Task? {
        val uri = "http://localhost:50000/tasks/$taskId"

        return restTemplate?.getForObject(uri, Task::class)
    }
}

参考
そもそもRestTemplate使用する時に公式Documentの以下の部分を見て実装した方が良かった。
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-resttemplate

コード
https://github.com/little-engineer/bff-sample/pull/8

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
little
15年以上プログラマーをしているエンジニアです。Kotlin, Java, Python, C++を使用したServerSideの開発に携わってきました。とりあえずやってみるスタイルで記事を更新していきます。