Adds missing multipart support.
Before using you need to see
- This comment
- This explanation
FilePartarguments forWebFluxreactive stack
Ensure you have the necessary dependencies:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>name.nkonev.multipart-spring-graphql</groupId>
<artifactId>multipart-spring-graphql</artifactId>
<version>VERSION</version>
</dependency>@Controller
public class FileController {
private static final Logger logger = LoggerFactory.getLogger(FileController.class);
@MutationMapping(name = "fileUpload")
public FileUploadResult uploadFile(@Argument FilePart file) {
logger.info("Upload file: name={}", file.filename());
return new FileUploadResult(UUID.randomUUID());
}
@MutationMapping(name = "multiFileUpload")
public Collection<FileUploadResult> uploadMultiFiles(@Argument Collection<FilePart> files) {
for (FilePart filePart : files) {
logger.info("Upload file: name={}", filePart.filename());
}
return List.of(new FileUploadResult(UUID.randomUUID()));
}
}MultipartFilearguments forWebMvcservlet stack
Ensure you have the necessary dependencies:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<dependency>
<groupId>name.nkonev.multipart-spring-graphql</groupId>
<artifactId>multipart-spring-graphql</artifactId>
<version>VERSION</version>
</dependency>@Controller
public class FileController {
private static final Logger logger = LoggerFactory.getLogger(FileController.class);
@MutationMapping(name = "fileUpload")
public FileUploadResult uploadFile(@Argument MultipartFile file) {
logger.info("Upload file: name={}", file.getOriginalFilename());
return new FileUploadResult(UUID.randomUUID());
}
@MutationMapping(name = "multiFileUpload")
public Collection<FileUploadResult> uploadMultiFiles(@Argument Collection<MultipartFile> files) {
for (MultipartFile file : files) {
logger.info("Upload file: name={}", file.getOriginalFilename());
}
return List.of(new FileUploadResult(UUID.randomUUID()));
}
}WebClient-based client
Ensure you have the necessary dependencies:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-webclient</artifactId>
</dependency>
<dependency>
<groupId>name.nkonev.multipart-spring-graphql</groupId>
<artifactId>multipart-spring-graphql</artifactId>
<version>VERSION</version>
</dependency> @Autowired
private MultipartGraphQlWebClient httpGraphQlClient;
@Override
public void run(String... args) {
var request = MultipartClientGraphQlRequest.builder()
.withDocument("""
mutation FileNUpload($files: [Upload!]) {
multiFileUpload(files: $files){
id
}
}
""")
.withFileVariables(singletonMap("files", List.of(new ClassPathResource("/foo.txt"), new ClassPathResource("/bar.txt"))))
.build();
var response = httpGraphQlClient.executeFileUpload("http://localhost:8899/graphql", request).block();
LOGGER.info("Response is {}", response);
}RestClient-based client
Ensure you have the necessary dependencies:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-restclient</artifactId>
</dependency>
<dependency>
<groupId>name.nkonev.multipart-spring-graphql</groupId>
<artifactId>multipart-spring-graphql</artifactId>
<version>VERSION</version>
</dependency> @Autowired
private MultipartGraphQlRestClient httpGraphQlClient;
@Override
public void run(String... args) {
var request = MultipartClientGraphQlRequest.builder()
.withDocument("""
mutation FileNUpload($files: [Upload!]) {
multiFileUpload(files: $files){
id
}
}
""")
.withFileVariables(singletonMap("files", List.of(new ClassPathResource("/foo.txt"), new ClassPathResource("/bar.txt"))))
.build();
var response = httpGraphQlClient.executeFileUpload("http://localhost:8889/graphql", request);
LOGGER.info("Response is {}", response);
} | multipart-spring-graphql | Java | Spring Boot | Example |
|---|---|---|---|
| 0.10.x | 8+ | Spring Boot 2.7.x | https://github.com/nkonev/multipart-graphql-demo/tree/0.10.x |
| 1.0.x | 17+ | Spring Boot 3.0.x | https://github.com/nkonev/multipart-graphql-demo/tree/1.0.x |
| 1.1.x | 17+ | Spring Boot 3.1.x | https://github.com/nkonev/multipart-graphql-demo/tree/1.1.x |
| 1.2.x | 17+ | Spring Boot 3.2.x | https://github.com/nkonev/multipart-graphql-demo/tree/1.2.x |
| 1.3.x | 17+ | Spring Boot 3.3.x | https://github.com/nkonev/multipart-graphql-demo/tree/1.3.x |
| 1.4.x | 17+ | Spring Boot 3.3.x | https://github.com/nkonev/multipart-graphql-demo/tree/1.4.x |
| 1.5.x | 17+ | Spring Boot 3.4.x | https://github.com/nkonev/multipart-graphql-demo/tree/1.5.x |
| 2.0.x | 17+ | Spring Boot 4.0.x | https://github.com/nkonev/multipart-graphql-demo/tree/2.0.x |
Jackson 2 is being deprecated in Spring Boot 4. In order to reduce maintenance burden only Jackson 3 is supported. Please migrate your application onto Jackson 3 first.