有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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文件。更准确地说,我得到的错误如下:

HttpResponseError

即使我根本不在后端使用JSON文件

所以,我的问题是:我错在哪里?如何从前端的JavaResponse对象获取实际数据

最后,我看到了一系列从后端下载文件的示例(如this)。这是怎么回事?这比获取byte[]对象更好吗


共 (0) 个答案