为了账号安全,请及时绑定邮箱和手机立即绑定

HTTP POST Angular 到 Java。不能发送多个不同类型的参数

HTTP POST Angular 到 Java。不能发送多个不同类型的参数

慕雪6442864 2023-05-17 16:05:09
我正在尝试将上传的文件(来自 Angular 的 FormData)和同一个 HTTP POST 请求中的字符串发送到后端(Java 使用 Grizzly 服务器和 Ajax 用于 REST 服务)。问题是我收到 HTTP 400 Bad Request 因为文件没有正确映射:jersey message: Can not construct instance of java.io.InputStream: abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type在前端,我有一个名为 Form 的类,它是使用 ng g class Form 创建的,其中包含:export class Form {    private file:FormData;    private bookName: String;    constructor(file:FormData, bookName: String) {        this.file = file;        this.bookName = bookName;    }}Frontend 的 HTTP POST 方法是:  sendFormData() {    const form  = new Form(this.testData, this.bookName);    this.pdfService.sendFormData(form).subscribe((res) => {      console.log(res);    });  }上面的 this.testData 具有 FormData 类型,而 this.bookName 是一个字符串。它们都包含预期的输入值。pdfService.sendFormData 是:  public sendFormData(form: Form) {    console.log("sending to " + this.baseUrl + "uploadFile")    return this.http.post(this.baseUrl + "uploadFile", form, { responseType: 'text' });  }在后端我有一个类 Form.java (映射类):public class Form {    String bookName;    InputStream file;    ... (getters & setters & constructor)}HTTP POST 方法是:    @POST    @Consumes(MediaType.APPLICATION_JSON)    @Produces(MediaType.TEXT_HTML)    @Path("uploadFile")    public Response convertPdfToHtml(Form form) {            ...    }要获取映射的字符串,我使用:form.getBookName() 并获取映射的文件,我使用:form.getFile()。正如我所说,问题是来自前端的文件没有正确映射到来自后端的 InputStream。我应该使用什么类型将前端的 FormData 映射到后端的类型?或者我可以使用哪些其他实现在同一个 POST 请求中发送文件和字符串?
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

在 POST 方法中,您应该提供 FormData 类型的对象,并且有


export class Form {

  private file: File;

  private bookName: String;


  constructor(file:File, bookName: String) {

    this.file = file;

    this.bookName = bookName;

  }

}



public sendFormData(form: Form) {

  const formData = new FormData();

  formData.append('bookName', form.bookName);

  formData.append('file', form.file, form.file.name);


  console.log("sending to " + this.baseUrl + "uploadFile")

  return this.http.post(this.baseUrl + "uploadFile", formData, {responseType: 'text'});

}

你会得到内容类型为 multipart/form-data 的帖子


查看完整回答
反对 回复 2023-05-17
  • 1 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信