Я пытаюсь вызвать функцию отдыха, но она показывает ошибку, например:
.
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 не меняется.
Как это правильно (логически)? локальный: 9000/API/файл/[объект%20Object]





Если вы собираетесь отправлять сложную структуру данных, например объект, лучше использовать метод 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})
Как должен выглядеть URL-адрес? На данный момент вы просто объединяете строку с объектом.