не найдено подходящего HttpMessageConverter для типа ответа [class java .lang.Object] и типа содержимого [multipart / form-data; Border = XXX; charset = UTF-8] - PullRequest
0 голосов
/ 12 июля 2020

Я выполняю пост-вызов multipart formdata из пользовательского интерфейса для загрузки файла. Из пользовательского интерфейса вызов переходит к контроллеру компонента A, который вы можете рассматривать как общий компонент или шину, которая просто читает поток, передает поток другому контроллеру компонента B через вызов rest, который загружает файл и отправляет обратно метаданные о загруженном файле в * Формат 1024 *.

Проблема: Вызов успешно проходит до контроллера компонента B, файл загружен, но когда ответ компонента B достигает компонента A, я получаю ошибку ниже

"message": "Не удалось извлечь ответ: не найден подходящий HttpMessageConverter для типа ответа [class java .lang.Object] и типа содержимого [multipart / form-data; Border = HWhdmg6KNJw_kaP4wWnLyoAb9htc8StF4; charset = UT 8] "

Может кто-нибудь помочь, пожалуйста?

Компоненты A код

@PostMapping(value = "/v3/documents",consumes =  MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity uploadMultipartDocument(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse)  {
    ResponseEntity<?> responseEntity = null;
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);
    headers.set(HznAppsHeaderConstant.DOCUMENT_TYPE, HznAppsUtil.getHeaderFromCustomHeaderParameterProvider(customHeaderParameterProvider, HznAppsHeaderConstant.DOCUMENT_TYPE));
    InputStream stream =null;
    MultiValueMap<String, Object> params= new LinkedMultiValueMap<String, Object>();
    try{
      ServletFileUpload upload = new ServletFileUpload();
      FileItemIterator iterStream = upload.getItemIterator(req);
      while (iterStream.hasNext()){
        FileItemStream item = iterStream.next();
        stream = item.openStream();
        if (!item.isFormField()  && item.getFieldName().equalsIgnoreCase("file")) {
          InputStreamResource inputStream = new InputStreamResource(stream) {
            @Override
            public String getFilename() {
              return item.getName();
            }

            @Override
            public long contentLength() {
              return -1;
            }
          };
          params.add("file", inputStream);
          break;
        }
      }
      final HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(params, headers);
      restTemplate.getInterceptors().clear();
      SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
      requestFactory.setBufferRequestBody(false);
      restTemplate.setRequestFactory(requestFactory);
      responseEntity = restTemplate.exchange("Component B URL", HttpMethod.POST, httpEntity, Object.class);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return responseEntity;
  }

Компонент B код

@RequestMapping(value = "/api/v3/documents", produces = {"application/json"}, consumes = {"multipart/form-data"}, method = RequestMethod.POST)
    public ResponseEntity uploadMultipartDocument(HttpServletRequest request) {
        ResponseDocument responseDocument = null;
        try {
            responseDocument = documentsService.uploadMultiPartDocument(request,documentType); // Doing Soap call to upload document and its works fine in this method
        } catch (Exception e) {
            e.printStackTrace();
           
        }
        return new ResponseEntity<>(responseDocument, HttpStatus.OK);
    }

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...