javascript - 将复杂的 FormData 从 Angular 5 传递到 Java Spring 3
问题描述
我正在尝试将数组和字符串的数组插入到 FormData 中,但是 java 似乎没有收到它,我的 Java 服务器中没有日志错误但是我的 JavaScript 控制台中有 500 内部服务器错误。
这是我的控制器的代码:
@RequestMapping(value = "/getReporting", method = RequestMethod.POST)
@ResponseBody
public void getReporting(@RequestParam RecommendationForm form, @RequestParam String type, HttpServletResponse response) throws ApcException {
System.out.println("prova");
Map.Entry<String, byte[]> result = this.reportingService.getReporting(form,type);
try {
response.setHeader(//
"Content-Disposition",//
"attachment; filename=" +"bobo.xlsx");
response.setContentType("Application/x");
response.getOutputStream().write(result.getValue());
response.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是我在 Angular 中的服务:
public getExcel(form: FormData): Observable<HttpResponse<Blob>> {
return this.http.post('/SV-AUD/api/reporting/getReporting', form, {observe: 'response', responseType: 'blob'});
}
以及我在 formData 中附加信息的组件:
form: FormGroup = this._fb.group(
{
hello1: [],
hello2: [],
hello3: [],
hello4: [],
hello5: [],
hello6: [],
hello7: [],
hello8: [],
hello9: [],
}
);
exportExcel() {
const formData: FormData = new FormData();
formData.append('form', this.form.getRawValue());
if (this.detailedType) {
formData.append('type', 'detailed');
} else {
formData.append('type', 'list');
}
this.reportingService.getExcel(formData).subscribe(data => {
const ctHeader = data.headers.get('content-disposition');
if (ctHeader) {
const filename = ctHeader.split('=')[1];
saveAs(data.body, filename);
}
});
}
解决方案
您所描述的行为表明 Spring 无法将您@RequestParam
的方法参数绑定getReporting
到传入请求。
这意味着您从 Angular 端发布的数据与 Spring 端的预期不匹配。
除非它是一个错字,否则我猜问题出在组件源代码中的这一行,它什么都不做(并且应该是由于不匹配的括号而导致的语法错误):
(this.form.getRawValue()));
我猜它应该是:
formData.append('form', (this.form.getRawValue()));
推荐阅读
- javascript - 需要找到将数组分成两个子集的元素的索引,它们的和相等
- python - 来自同一个 Keras 模型的非常不同的结果,使用顺序或函数式构建
- python - 基于特定模式的子字符串
- azure - Azure 功能冻结
- reactjs - 键入'FlattenInterpolation
>' 不可分配给类型 'FlattenSimpleInterpolation' - java - 从命令行 2021 使用 maven 打包 apk
- android - Android 设备无法连接到 docker 上的本地 Web 服务器
- c++ - C++ - 我如何频率计数字符?
- python - 如何编写枚举循环
- visual-studio - 在 Visual Studio 中禁用直接查询模式