我正在嘗試將上傳的文件(來自 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 的帖子
添加回答
舉報
0/150
提交
取消