🏗️
【Spring for GraphQL】Uploadされたファイルを受け取りたい
概要
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