HTTP POST Angular 到 Java。不能发送多个不同类型的参数
HTTP POST Angular to Java. Cannot send multiple parameters with different types
我正在尝试将上传的文件(来自 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
在前端,我有一个使用 ng g class 表单创建的名为 class 的表单,其中包含:
export class Form {
private file:FormData;
private bookName: String;
constructor(file:FormData, bookName: String) {
this.file = file;
this.bookName = bookName;
}
}
前端的 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' });
}
在后端我有一个 class Form.java(映射的 class):
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 请求中发送文件和字符串?
谢谢。
在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'});
}
你会得到 post 内容类型 multipart/form-data
我正在尝试将上传的文件(来自 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
在前端,我有一个使用 ng g class 表单创建的名为 class 的表单,其中包含:
export class Form {
private file:FormData;
private bookName: String;
constructor(file:FormData, bookName: String) {
this.file = file;
this.bookName = bookName;
}
}
前端的 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' });
}
在后端我有一个 class Form.java(映射的 class):
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 请求中发送文件和字符串?
谢谢。
在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'});
}
你会得到 post 内容类型 multipart/form-data