【发布时间】:2019-06-19 18:19:00
【问题描述】:
我正在一个项目中工作,我需要使用 ocr 从图像中获取数据。 我正在使用第三方的 ocr,我可以在其中上传文件并从 ocr 中获取数据。
我需要通过 spring boot 调用这个 API。这个api是multipart/form-data。
我创建了一个获取文件的函数,并尝试创建一个将文件发布到外部 api 的请求。 我收到错误
"message": "Type definition error: [simple type, class java.io.FileDescriptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.FileDescriptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain:
org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile[\"inputStream\"]->java.io.FileInputStream[\"fd\"])",
控制器方法:
@PostMapping(value = "/ocrImage")
public ResponseEntity<GenericResponse> ocrImage(@RequestParam("file") MultipartFile file) {
Object ocrDataImage = ocrService.ocrImage(file);
return ResponseBuilder.buildResponse(ocrDataImage , 0, "");
}
服务调用
public Object ocrImage(MultipartFile file) {
// adding headers to the api
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.set("x-key", API_KEY);
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file", file);
HttpEntity<MultiValueMap<String, Object>> requestEntity= new HttpEntity<>(body, headers);
RestTemplate restTemplate = new RestTemplate();
Object result = restTemplate.postForEntity(EXTERNAL_API_ENDPOINT, requestEntity,
String.class);
System.out.println(result);
return result;
}
当调用 postForEntity 时,我得到上面提到的错误。
如果您需要更多详细信息,请告诉我。
【问题讨论】:
-
您能否对此进行扩展并添加调用此方法并创建 MultipartFile 对象的方法?
-
@Kieveli 我没有创建,我正在使用邮递员表单数据上传文件并进入控制器。
标签: java spring spring-boot multipartform-data