javascript如何在RESTful体系结构中从后端获取数据?
我正在使用Java
后端和Angular
前端构建一个RESTful体系结构。其思想如下:给定一个包含大量Fields
的表单,前端生成一个JSON
文件并将其发送到后端,在后端将使用xdocreport
和.docx
模板文件对其进行处理,以便执行上下文替换。这个管道生成一个.docx
文件,我应该以某种方式返回到前端,或者下载它,或者返回一个包含byte[]
实体的Response
这是我在后端的帖子:
@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();
}
其中Controller.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
文件
所以,我的问题是:我错在哪里?如何从前端的JavaResponse
对象获取实际数据
最后,我看到了一系列从后端下载文件的示例(如this)。这是怎么回事?这比获取byte[]
对象更好吗
共 (0) 个答案