Ответ при загрузке Spring возвращает ошибку, несмотря на то, что я получил код 200

#angular #spring-boot #httpresponse

#angular #spring-boot #httpresponse

Вопрос:

В HTTP-сообщении я должен вернуть документ PDF. Я тестирую его с помощью postman, и он работает нормально. Когда я пытаюсь использовать его в своем приложении Angular, я получаю эту ошибку (публикуется в виде картинки по причинам форматирования): введите описание изображения здесь

Итак, что-то не так с моим ответом, но я не могу найти ошибку.

Где создается ответ:

 public ResponseEntity<byte[]> compareWithLocal(CompareJob compareJob) {
        logger.info(compareJob);
        File leftFile = compareJob.getFile1();
        File rightFile = compareJob.getFile2();

        byte[] document = null;
        HttpHeaders header = new HttpHeaders();
        try {
            final CompareResult result = new PdfComparator(leftFile, rightFile, new CompareResultWithPageOverflow()).compare();

            if (result.isEqual()) {
                logger.info("Compare job is: equal");
            } else {
                String path = System.getProperty("java.io.tmpdir");
                System.out.println("File written to: "   path);
                result.writeTo(path   "demo");
                compareJob.setCompareResultFile(new File(path   "demo.pdf"));
                // TODO: Delete temp
                logger.info("Compared file path: "   compareJob.getCompareResultFile());

                document = FileCopyUtils.copyToByteArray(compareJob.getCompareResultFile());
                header.setContentType(new MediaType("application", "pdf"));
                header.set("Content-Disposition", "inline; filename="   compareJob.getCompareResultFile().getName());
                header.setContentLength(document.length);
                logger.info(document);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return new ResponseEntity<byte[]>(document, header, HttpStatus.OK);
    }
  

Где вызывается метод для создания ответа:

 @PostMapping("/pdfdiffLocal")
    ResponseEntity<byte[]> pdfDiffLocal(@RequestParam("file1") MultipartFile file1, @RequestParam("file2") MultipartFile file2) {
        logger.info("Received File 1: "   file1.getOriginalFilename()   ", File 2: "   file2.getOriginalFilename());
        PdfDiffCompare pdfDiffCompare = new PdfDiffCompare();
        File converted1 = convert(file1);
        logger.info("File 1: "   converted1);
        File converted2 = convert(file2);
        logger.info("File 2: "   converted2);

        CompareJob compareJob = new CompareJob(converted1, converted2);
        logger.info("Compare Job after convert. F1: "   compareJob.getFile1()   " F2: "   compareJob.getFile2());

        ResponseEntity<byte[]> returnComparison = pdfDiffCompare.compareWithLocal(compareJob);

        logger.info(returnComparison);
        return returnComparison;
    }
  

Это то, что я регистрирую в ResponseEntity:

 <200 OK OK,[B@50fdfe86,{Content-Type=[application/pdf], Content-Disposition=[inline; filename=demo.pdf], Content-Length=[838078]}>
  

Угловая часть, где я вызываю серверную часть:

 comparePdfDiff() {
        console.log('Submitted PDF Diff');
        let formModel = this.prepareSave();
        this.loading = true;
        console.log('Formmodel: ', formModel);
        this.http.post('http://localhost:8080/pdfdiffLocal', formModel)
            .subscribe((response: ApiResponseModel) => {
                console.log('response: ', response);
                this.router.navigate(['/pdfdiff']);

                let returnValue = JSON.stringify(response);
                console.log('parsed: ', returnValue);
                this.comparejobdataService.pdfFile.push(response.pdfFile);
            });
        setTimeout(() => {
            this.loading = false;
        }, 10000);
    }
  

Спасибо за любую помощь!

Комментарии:

1. Можете ли вы поделиться кодом, который вы используете для достижения конечной точки из angular?

2. Вы используете angular на Apache? проверьте, что возвращает ваш веб-сервер, возможно, ваш веб-сервер не преобразует тип контента, как ожидалось. Проверьте конфигурацию веб-сервера.

3. Я добавил свой код angular, в котором я вызываю серверную часть. Спасибо за вашу помощь!