0

I am trying to download a file from S3 using S3AsyncClient's getObject(objectRequest, AsyncResponseTransformer.toBlockingInputStream()) which returns a CompletableFuture<ResponseInputStream<GetObjectResponse>> in my controller. But it throws below the exception.

Exception Message:

org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:322)

Controller

import software.amazon.awssdk.core.ResponseInputStream;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
@RestController
@RequestMapping("api/vone/sthreedownload")
public class S3Controller {
    private S3Service s3service;
    public S3Controller(S3Service s3service) {
        this.s3service = s3service;
    }
    @GetMapping(value="/download-file/{id}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE )
    public CompletableFuture<ResponseInputStream<GetObjectResponse>> downloadFileFromS3(String id){
        return s3service.downLoadFile(id);
    }
}

Service

@Service
public class S3Service {
    
    private S3AsyncClient s3CAsyncClient;

    public S3Service(S3AsyncClient s3cAsyncClient) {
        s3CAsyncClient = s3cAsyncClient;
    }
    @Async
    public CompletableFuture<ResponseInputStream<GetObjectResponse>> downLoadFile(String id) {
        GetObjectRequest objectRequest = GetObjectRequest.builder().key(id).bucket("BCD").build();
        return s3CAsyncClient.getObject(objectRequest, AsyncResponseTransformer.toBlockingInputStream());

    }

}

0 Answers0