Java Spring RestTemplate提供$InternalServerError:500 null。同样适用于邮递员和小文件

Java Spring RestTemplate提供$InternalServerError:500 null。同样适用于邮递员和小文件,java,spring,rest,spring-boot,Java,Spring,Rest,Spring Boot,我有一个Spring批处理应用程序,它执行以下操作 从AmazonS3存储桶读取文件 写到本地 压缩文件并将其作为字节数组发送给RESTAPI(API接受字节[]) 当作业为小文件(低于2MB)运行时,它工作正常,我从API得到响应 但当它试图访问大文件时,API抛出下面的异常 org.springframework.web.client.HttpServerErrorException$InternalServerError:500 null 同样大的文件,如果我通过邮递员,我会得到正确的回应

我有一个Spring批处理应用程序,它执行以下操作

  • 从AmazonS3存储桶读取文件
  • 写到本地
  • 压缩文件并将其作为字节数组发送给RESTAPI(API接受字节[])
  • 当作业为小文件(低于2MB)运行时,它工作正常,我从API得到响应 但当它试图访问大文件时,API抛出下面的异常

    org.springframework.web.client.HttpServerErrorException$InternalServerError:500 null

    同样大的文件,如果我通过邮递员,我会得到正确的回应

    我的休息电话如下所示

           ClientHttpRequestFactory requestFactory = new     
                  
          HttpComponentsClientHttpRequestFactory(HttpClients.createDefault());
    
        RestTemplate restTemplate = new RestTemplate(requestFactory);
            URI uri = new URI(submitUrl);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.MULTIPART_FORM_DATA);
                MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
                
                body.add("inputDoc", byteArray);
                body.add("metaData", createOcrSubmitMap(fileName));
                HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
                ResponseEntity<String> response = restTemplate.postForEntity(uri, requestEntity, String.class);
    
    clienthtprequestfactory requestFactory=new
    HttpComponents客户端HttpRequestFactory(HttpClients.createDefault());
    RestTemplate RestTemplate=新的RestTemplate(requestFactory);
    URI=新URI(submitur);
    HttpHeaders=新的HttpHeaders();
    headers.setContentType(MediaType.MULTIPART\u FORM\u DATA);
    MultiValueMap body=新链接的MultiValueMap();
    添加(“inputDoc”,byteArray);
    添加(“元数据”,createOcrSubmitMap(文件名));
    HttpEntity requestEntity=新的HttpEntity(主体、标题);
    ResponseEntity response=restTemplate.postForEntity(uri、requestEntity、String.class);
    
    注意:我能够将此字节[]写入文件,并且能够正确打开和查看该文件

    同一组代码可以很好地处理小文件

    大文件会出什么问题

    完成堆栈跟踪

    org.springframework.web.client.HttpServerErrorException$InternalServerError:500 位于org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:79) 位于org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:124) 位于org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102) 位于org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) 位于org.springframework.web.client.restemplate.handleResponse(restemplate.java:778) 位于org.springframework.web.client.restemplate.doExecute(restemplate.java:736) 位于org.springframework.web.client.restemplate.execute(restemplate.java:710) 位于org.springframework.web.client.restemplate.postForEntity(restemplate.java:463) 位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) 位于org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:163)上 位于org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:295) 位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) 位于org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:186) 位于org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) 位于org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:407) 位于org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:331) 位于org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) 位于org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:273) 位于org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInitation(StepContextRepeatCallback.java:82) 位于org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:375) 位于org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215) 位于org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:145) 位于org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:258) 位于org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:203) 位于org.springframework.batch.core.job.simplestphandler.handleStep(simplestphandler.java:148) 位于org.springframework.batch.core.job.AbstractJob.handleStep(AbstractJob.java:399) 位于org.springframework.batch.core.job.SimpleJob.doExecute(SimpleJob.java:135) 位于org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:313) 位于org.springframework.batch.core.launch.support.simplejoblancher$1.run(simplejoblancher.java:144) 位于org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) 位于org.springframework.batch.core.launch.support.simplejoblancher.run(simplejoblancher.java:137) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) 位于org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:163)上 位于org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$PassthruAdvice.invoke(SimpleBatchConfiguration.java:127) 位于org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:186) 位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) 位于com.sun.proxy.$Proxy94.run(未知源) 在com.test.batch.config.JobLa上
    ResponseEntity<String> response = restTemplate.postForEntity(uri, requestEntity, String.class);
    
            MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
            ByteArrayResource contentsAsResource = new ByteArrayResource(byteArray){
                @Override
                public String getFilename() {
                    return fileName;
                }
            };
            body.add("inputDoc", contentsAsResource);
            body.add("metaData", createOcrSubmitMap(fileName));