我的Java后端API希望对Angular前端上的表单进行多部分POST请求,该请求当前正在使用反应式表单。端点看起来像这样:
@PostMapping("/submit")
public ResponseEntity<?> submit(
@RequestParam String requester,
@RequestParam String subject,
@RequestParam String description,
@RequestParam String htmlBody,
@RequestParam String customFieldValues,
@RequestParam List<MultipartFile> attachments) {
return myBackendService.submitToZendesk(
requester, subject, description, htmlBody, customFieldValues, attachments);
}
Angular组件中的提交功能如下所示(当前使用伪造的表单数据):
public onSubmit(): void {
const formData = new FormData();
formData.append('requester', 'ryan');
formData.append('subject', 'Test Subject',);
formData.append('description', 'test desc',);
formData.append('htmlBody', '',);
formData.append('customFieldValues', 'test');
this.frontendService.submitForm(formData).subscribe(
res => console.log(res),
err => this.onHandleError(err)
);
}
服务:
public submitForm(payload: any): Observable<any> {
return this.resourceService.submitForm(payload)
}
最后是资源服务:
public submitShippingAuth(payload: ShippingAuthRequest): Observable<any> {
const url = `${environment.api}/submit`
return this.http.post(`${url}`, payload)
.pipe(map(this.extractResponse), catchError(this.handleError))
}
我在帖子中收到400状态代码:
error: "Bad Request"
message: "Required String parameter 'requester' is not present"
path: "/v1/submit"
status: 400
timestamp: 1571771034002
trace: "org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'requester' is not present
但是我的请求有效载荷肯定似乎具有表单数据:
------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="requester"
ryan
------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="subject"
Test Subject
------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="description"
test desc
------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="htmlBody"
------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="customFieldValues"
test
------WebKitFormBoundaryTIuEnyoDjbqZHnFA--
有人知道我在做什么错吗? Postman中的表单数据POST起作用。
答案 0 :(得分:0)
要打印请求者的行应包含逗号(,),如下所示 formData.append('requester','ryan',);
希望这可以解决您的问题。
答案 1 :(得分:0)
提交功能肯定看起来不错,formData.append
中的第三个arg是文件名,因此没有必要。我发现的唯一结果是,您尚未在http post
请求中设置标头。我猜您正在使用interceptors
这样做,如果没有,请尝试这样做。