Необходимо зарегистрировать MediaType.MULTIPART_FORM_DATA для получения нескольких файлов по POST запросу

Возникает ошибка [[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response ru.hh.school.resource.CandidateResource.uploadFile(java.io.InputStream) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class ru.hh.school.resource.CandidateResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@300d25a9]}. Я посмотрел все похожие темы, но ни одна из них не помогла.

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.29.1</version>
</dependency>
@Singleton
@Path("/candidate")
public class CandidateResource {
    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
        @FormDataParam("part") String s,
        @FormDataParam("file") InputStream uploadedInputStream) {
        
        String outputPath = "src/main/java/"  + s + ".pdf";
        int len = 0;
        byte[] buff = new byte[1024];
        String str = "";
        try {
            FileOutputStream out = new FileOutputStream(outputPath);
            while ((len = f.read(buff)) > 0) {
                out.write(buff);
            }
        } catch (IOException ex) {
        
        }
        return s;
    }
}

Здесь я регистрирую bean

@Configuration
@Import({
        // import your beans here
        CandidateResource.class,
        NabCommonConfig.class,
        CandidateDao.class,
    
        CandidateMapper.class,
    
        MultiPartFeature.class
})

Ответы (1 шт):

Автор решения: Алексей Селиверстов

Рекомендую принимать файлы в следующем виде:

@POST
  @Consumes(MediaType.MULTIPART_FORM_DATA)
  public Response multipart(MultipartBody multipartBody){
}

Соответственно из multipartBody забирать файлы и работать с ними как угодно. В Вашем примере, вы принимаете только один параметр "file" в который можно положить только один файл.

→ Ссылка