以前セットアップしたApollo Client でリクエスト時にヘッダーにAuth情報を含めたい
設定方法は以下に書かれている
10. Authenticate your queries - Apollo GraphQL Docs
Kotlin用をJavaに読み替えて、以下のように書くけば良さそう
OkHttpClient okHttp = new OkHttpClient.Builder() .addInterceptor( chain -> { Request request = chain .request() .newBuilder() .method("POST", chain.request().body()) .addHeader("X-Api-Key", properties.getAuth().getKey()) .build(); return chain.proceed(request); }) .build(); ApolloClient client = ApolloClient.builder() .serverUrl("https://apollo-fullstack-tutorial.herokuapp.com/") .okHttpClient(okHttp) .build();
Spring boot 2.5系の場合エラーになる
上の実装をして実行したところ、以下のランタイムエラーが発生した
java.lang.NoSuchFieldError: Companion
これはcom.squareup.okhttp3:okhttp:4.x
が期待される所でcom.squareup.okhttp3:okhttp:3.x
が利用されたということで発生するエラー
下を見ると、確かにspring-bootのv2.5系のokhttpはokhttp3がv3系なので、これが原因だった
pomに直接okhttp3をv4系にあげてみるとエラーが発生しなくなった
動くようにはなったが、spring-bootが古いのはよくない状態なので、一旦はこれで様子を見てspring-bootのバージョンアップを検討する
参考
https://wrongwrong163377.hatenablog.com/entry/2022/01/19/192535