【发布时间】:2020-03-17 12:10:01
【问题描述】:
是否可以将收到的 MultiPartFile 项从 REST 资源转发到 Feign 客户端并期望它工作?
我的情况是,我需要通过我的微服务中的 API 网关从客户端获取 MultiPartFile 请求,然后将其传递给外部服务,并在从外部服务获得响应后需要在主中间微服务并响应客户端。
微服务 REST API:
@RestController
@RequestMapping("/api")
public class VisionApiTestResource {
....
@PostMapping("/vision-test/upload-image")
public ResponseEntity<VisionApiTestResultDTO> handleFileUpload(@RequestParam("file") MultipartFile file ) {
VisionApiTestResultDTO visionApiTestResultDTO = visionApiTestService.testVisionApi(file);
return ResponseEntity.ok().body(visionApiTestResultDTO);
}
....
}
调用Feign客户端的服务
@Service
public class VisionApiTestService {
...
public VisionApiTestResultDTO testVisionApi(MultipartFile multipartFile) {
BackgroundRemoverResultDTO backgroundRemoverResultDTO = backgroundRemoverClient.removeBackground(multipartFile);
...
}
}
我的假客户:
@FeignClient(name = "BackgroundRemover", url = "http://localhost:8000")
public interface BackgroundRemoverClient {
@RequestMapping(value = "/background_removal/remove_background/", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
BackgroundRemoverResultDTO removeBackground(@RequestPart("file") MultipartFile untouchedImageFile);
}
这是我得到的例外:
java.lang.IllegalArgumentException: Illegal base64 character 3a
at java.util.Base64$Decoder.decode0(Base64.java:714)
at java.util.Base64$Decoder.decode(Base64.java:526)
at java.util.Base64$Decoder.decode(Base64.java:549)
at com.whereandshare.kiosk.kioskservice.service.VisionApiTestService.testVisionApi(VisionApiTestService.java:37)
at com.whereandshare.kiosk.kioskservice.service.VisionApiTestService$$FastClassBySpringCGLIB$$193667fb.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:769)
【问题讨论】:
标签: spring multipart spring-cloud-feign feign