Java Spring RestTemplate提供$InternalServerError:500 null。同样适用于邮递员和小文件
我有一个Spring批处理应用程序,它执行以下操作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 同样大的文件,如果我通过邮递员,我会得到正确的回应
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));