Spring boot Пересылка полученного MultiPartFile в Feign Client - PullRequest
0 голосов
/ 17 марта 2020

Можно ли переслать полученный элемент MultiPartFile из ресурса REST в клиент Feign и ожидать, что он будет работать?

Я нахожусь в ситуации, когда мне нужно получить запрос MultiPartFile от клиента через Шлюз API в моем микросервисе, затем передайте его внешней службе и после получения ответа от внешней службы необходимо выполнить некоторые дополнительные операции в основной промежуточной микросервисе и ответить клиенту.

API-интерфейс REST для микросервиса:

@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);

        ...
    }

}

Мой клиент Feign:

@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)

1 Ответ

0 голосов
/ 17 марта 2020

На самом деле Проблом не может пересылать MultiPartFile, который вы получили от конечной точки REST при весенней загрузке с помощью симулированного клиента.

И напечатанная трассировка стека не имеет ничего общего с симметрированием и пружиной. Это была небольшая глупая ошибка, которую я сделал после получения результата от симуляции.

...