🏗️

【Spring for GraphQL】Uploadされたファイルを受け取りたい

2024/09/27に公開

概要

GraphQLではスキーマにUploadの型を設定して、ファイルをアップロードするような手法を取ると思いますが、Spring for GraphQLでファイルをどのように受け取るかというメモ書きです。

対応方針

Spring for GraphQLのServer Transportsのドキュメントによると、2024年9月時点では標準の機能では対応してなさそうです。別途multipart-spring-graphqlを使用するように案内されているので、今回はこのライブラリを使用します。

前提等

  • 使用したspring-boot-starter-graphqlのバージョンは3.3.3です。
  • 使用したmultipart-spring-graphqlのバージョンは1.3.2です。
  • 今回はJavaで実装しました。
  • クライアント側の実装については今回の記事では割愛します。詳細は【Nuxt 3】apollo-upload-clientをNuxtで使用してみたの記事をご参考ください。

実装サンプル

まずはschemaファイルです。以下のようにmutationを定義します。
なお、Uploadのscalarは、multipart-spring-graphqlのライブラリで自動で付与される動作になっているようなので、schemaファイルでは定義しなくてもよさそうです。

schema.graphqls
type Mutation {
    sampleUpload(
        userId: String!
        userNname: String!
        imageFile: Upload
    ): Boolean!
}

次にControllerです。SpringのMultipartFile形式(org.springframework.web.multipart.MultipartFile)でファイルが受け取れます。

SampleController.java
@Controller
public class SampleController {
    @MutationMapping
    public Boolean sampleUpload(
            @Argument String userId,
            @Argument String name,
            @Argument MultipartFile imageFile) throws GraphqlErrorException {
        // 処理内容は記載を割愛
		・
		・
		・
    }
}

Discussion