Java Aws lambda Spring多部分对象

Java Aws lambda Spring多部分对象,java,spring,amazon-web-services,amazon-s3,aws-lambda,Java,Spring,Amazon Web Services,Amazon S3,Aws Lambda,我已经在Amazon中配置了所有的内容类型和二进制类型,以支持多部分/表单数据,但是它仍然不喜欢它,我认为spring已经启动了Jackson,它将映射对象。我看过一个视频,其中的人成功地通过发送多部分通过它,所以我相信我在这里遗漏了一些东西,请帮助 邮递员提供以下资料: { "errorMessage": "An error occurred during JSON parsing", "errorType": &qu

我已经在Amazon中配置了所有的内容类型和二进制类型,以支持多部分/表单数据,但是它仍然不喜欢它,我认为spring已经启动了Jackson,它将映射对象。我看过一个视频,其中的人成功地通过发送多部分通过它,所以我相信我在这里遗漏了一些东西,请帮助

邮递员提供以下资料:

{
    "errorMessage": "An error occurred during JSON parsing",
    "errorType": "java.lang.RuntimeException",
    "stackTrace": [],
    "cause": {
        "errorMessage": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.web.multipart.MultipartFile` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information\n at [Source: (ByteArrayInputStream); line: 1, column: 1]",
        "errorType": "java.io.UncheckedIOException",
        "stackTrace": [
            "com.amazonaws.services.lambda.runtime.serialization.factories.JacksonFactory$InternalSerializer.fromJson(JacksonFactory.java:184)"
        ],
        "cause": {
            "errorMessage": "Cannot construct instance of `org.springframework.web.multipart.MultipartFile` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information\n at [Source: (ByteArrayInputStream); line: 1, column: 1]",
            "errorType": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.exc.InvalidDefinitionException",
            "stackTrace": [
                "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)",
                "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1589)",
                "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1055)",
                "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:265)",
                "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1719)",
                "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1228)",
                "com.amazonaws.services.lambda.runtime.serialization.factories.JacksonFactory$InternalSerializer.fromJson(JacksonFactory.java:182)"
            ]
        }
兰姆达

@Component
public class Hello implements Function<MultipartFile, String> {

    @Autowired
    private AmazonClient amazonClient;

    @Override
    public String apply(@RequestPart MultipartFile multipartFile) {
        return amazonClient.uploadFile(multipartFile);
    }
}
@Service
public class AmazonClient {

    @Autowired
    private final AmazonS3 s3client;
    
    @Value("${amazonProperties.endpointUrl}")
    private String endpointUrl;
    @Value("${amazonProperties.bucketName}")
    private String bucketName;
    @Value("${amazonProperties.accessKey}")
    private String accessKey;
    @Value("${amazonProperties.secretKey}")
    private String secretKey;

    public AmazonClient() {
        BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey,secretKey);
        this.s3client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_2)
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .build();;
    }

    public String uploadFile(MultipartFile multipartFile) {
        String fileUrl;
        try {
            File file = convertMultiPartToFile(multipartFile);
            String fileName = generateFileName(multipartFile);
            fileUrl = endpointUrl + "/" + bucketName + "/" + fileName;
            uploadFileTos3bucket(fileName, file);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return fileUrl;
    }

    private File convertMultiPartToFile(MultipartFile file){
        File convFile = new File(Objects.requireNonNull(file.getOriginalFilename()));
        try {
            FileOutputStream fos = new FileOutputStream(convFile);
            fos.write(file.getBytes());
            fos.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return convFile;
    }

    private String generateFileName(MultipartFile multiPart) {
        return new Date().getTime() + "-" + Objects.requireNonNull(multiPart.getOriginalFilename()).replace(" ", "_");
    }

    public void uploadFileTos3bucket(String fileName, File file) {
        s3client.putObject(new PutObjectRequest(bucketName, fileName, file)
                .withCannedAcl(CannedAccessControlList.PublicRead));
    }
}