angular - RequestParam 无法捕获从 Angular 发送的值
问题描述
我尝试通过 FormData 从 Angular 向 Spring-Boot 端发送请求。我还没有解决问题。我可以使用“邮递员”创建请求。客户端也可以响应此请求。如果我尝试通过 Angular 发送 Spring-Boot 会引发错误。是什么导致了这个问题?
弹簧启动侧
@CrossOrigin(origins = {"*"}, methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE, RequestMethod.PATCH})
@RestController
@RequestMapping("/api/product")
public class ProductController {
@PostMapping(value = "/save")
public ResponseEntity<Object> saveProduct (@RequestParam("coverImage") String[] coverImage, @RequestParam("alt") String[] alt) {
//
return ResponseEntity.ok().body(null);
}
}
角边
public saveProduct() {
const formdata = new FormData();
formdata.append('coverImage', 'imageName1');
formdata.append('coverImage', 'imageName2');
formdata.append('alt', 'altName1');
formdata.append('alt', 'altName2');
this.niceClient(formdata).subscribe();
}
public niceClient(formData: FormData): Observable<any> {
return new Observable(observer => {
this.http.post<any>('http://localhost:7070/api/product/save', formData).subscribe(res => {
observer.next(res);
observer.complete();
});
});
}
回复
{"timestamp":"2020-03-28T15:00:17.740+0000","status":400,"error":"Bad Request","message":"Required String[] parameter 'coverImage' is not present","path":"/api/product/save"}
我解决了: 感谢帮助过的朋友。
如果你在 Angular 上使用拦截器,请先检查它。在那里更改一些代码行解决了这个问题。
每个请求我都有一行:
request = request.clone({headers: request.headers.append('Content-Type', 'application/json; charset=UTF-8')});
所以,我改变了这些:
if (request.url === 'http://localhost:7070/api/product/save') {
} else {
if (!request.headers.has('Content-Type')) {
request = request.clone({headers: request.headers.append('Content-Type', 'application/json; charset=UTF-8')});
}
}