javascript - 如何在 RESTful 架构中从后端获取数据?
问题描述
我正在使用Java
后端和Angular
前端构建 RESTful 架构。这个想法如下:给定一个带有一堆 的表单Fields
,前端生成一个JSON
文件并将其发送到后端,该文件将xdocreport
与模板文件一起处理.docx
以执行上下文替换。这个管道生成一个.docx
文件,我应该以某种方式返回到前端,要么下载它,要么返回一个Response
包含byte[]
实体的文件。
所以,这是我在后端的帖子:
@POST
@Path("/form/{category}/export")
public Response generateDoc(JSONObject jObj) {
Response.ResponseBuilder rb = Response.ok(Controller.generateDocument(
Utils.getFileExtension(jObj.get("metadata").toString()),
(ArrayList)jObj.get("data"),
jObj.get("metadata").toString()
));
rb.header("Access-Control-Allow-Origin", "*");
rb.header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS");
rb.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
return rb.build();
}
whereController.generateDocument()
是一个静态方法,它实际生成文档并返回一个byte[]
. 我在前端的要求是:
exportToBackend(): void {
this.fields.forEach(field=>{
field.value = this.formGroup.value[field.label];
if (field.label == 'image') {
field.value = this.imgURL;
}
});
let result = {metadata: this.selectedTemplate, data: this.fields};
const httpOptions = {
headers: new HttpHeaders({
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, UPDATE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Accept, X-Requested-With'
})
};
this.http.post<Uint8Array>('http://localhost:8080/ExportLibrary-BackEnd-1.0-SNAPSHOT/form/'
.concat(this.category).concat('/export'), result, httpOptions).toPromise().then(data => {
this.doc = data;
});
}
当我运行它时,文档会正确生成(我将 byte[] 对象和实际.docx
文件都创建为一种“调试”),但在前端我得到一个Uint8Array (0)
空对象,我不明白为什么。此外,我还应该从该数组创建.docx
文件。更准确地说,我得到的错误如下:
即使我在后端根本JSON
不使用文件。
所以,我的问题是:我错在哪里?如何从Response
前端的 Java 对象中获取实际数据?
最后,我看到了一堆实际从后端下载文件的示例(像这样)。这是如何运作的?它比获取byte[]
对象更好吗?
解决方案
推荐阅读
- javascript - 如何使用javascript替换所有功能
- reactjs - 使用 react-google-login 和 django-allauth 刷新令牌
- python - 无法将 GPU 与 tensorflow-gpu 一起使用
- asp.net - 无法在两个不同的 Web api 调用之间获取会话值
- javascript - 如何在使用微服务和 AWS 的对话中构建对我的私有图像的访问?
- python - 忽略消息包含特定字符串的警告
- javascript - Firebase 函数配置不会部署
- javascript - 在百里香叶中未初始化更改属性
- mysql - 无法连接到数据库 Laravel Sail
- php - 如何从php数组动态呈现树枝条件