Как отправить имя переменной в функцию отдыха в angular? ошибка 400, неверный запрос). Ошибка

Я пытаюсь вызвать функцию отдыха, но она показывает ошибку, например:
. GET http://localhost:9000/api/filess/[object%20Object] 400 (Bad Request).
Возможно, я не могу получить имя переменной данных отчета. Как я могу это получить?

Как я могу решить эту проблему?

сторона компонента ниже:

showReport(filename: string) {
    this.reportData = new ReportData();
    this.reportData.month=this.selectedMonth;
    this.reportData.year= this.selectedYear;
    this.reportData.fileName= filename;
    var reportData: ReportData= this.reportData;
    this.defReportService.downloadFile(reportData).subscribe(
        res => {
            // var file = new Blob([res], {type: 'application/pdf'});
            var file = new Blob([res], { type: 'application/vnd.ms-excel' });
            var fileURL = URL.createObjectURL(file);
            // window.open(fileURL);
            const fname = filename + '_' + 
fileURL.toString().substr(fileURL.toString().lastIndexOf('/') + 1) + '.xls';
            saveAs(res, fname);
        },
        error => {
            console.info(error);
        }
    );
}

Служебная сторона внизу:

public downloadFile(req?: ReportData) {
    const encodedAuth = window.localStorage.getItem('encodedAuth');
    return this.http
        .get(`${this.resourceDownload}/${req}`, {
            headers: new HttpHeaders({
                Authorization: 'Basic ' + encodedAuth,
                'Content-Type': 'application/octet-stream'
            }),
            responseType: 'blob'
        })
        .pipe(
            tap(
                // Log the result or error
                data => console.info('You received data'),
                error => console.info(error)
            )
        );
}

ОСТАЛЬНАЯ сторона внизу:

@GetMapping("/filess/{reportData}")
@ResponseBody
public ResponseEntity<Resource> getFile(@PathVariable ReportData reportData) throws Exception {

    EnumList.JRList reportEnum = EnumList.JRList.valueOf(reportData.getFileName());
    File createdFile = jasperService.downloadReportFile(reportEnum, EnumList.JRExport.XLSX, reportData);
    Resource resourceFile = jasperService.loadFile(createdFile.getPath());
    String filePath = createdFile.getPath();
    //createdFile.delete();
    return ResponseEntity.ok()
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + filePath + "\"")
        .body(resourceFile);
}

Как должен выглядеть URL-адрес? На данный момент вы просто объединяете строку с объектом.

Chrillewoodz 08.02.2019 14:42

URL не меняется.

leventkalayz 08.02.2019 14:46

Как это правильно (логически)? локальный: 9000/API/файл/[объект%20Object]

Antoniossss 08.02.2019 14:56
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
3
57
1

Ответы 1

Если вы собираетесь отправлять сложную структуру данных, например объект, лучше использовать метод http POST.

ПОЧТА

const data = {...};
http.post(url , JSON.stringify(data));

в случае метода GET вы можете отправлять данные с параметрами свойства url?p=v&p2=v2

const options= { params: new HttpParams().set('name', ...) }
http.get(url , options)

сопоставить объект с httpParams

  const p = { p1: "1", p2: "2", p3: "3" };
  const params = Object.entries(p).reduce(
    (data: HttpParams, par) => data.append(par[0], par[1]),
    new HttpParams()
  );
  console.info(params.toString()); // => "p1=1&p2=2&p3=3"
  http.get(url , {params})

Другие вопросы по теме