Я пытаюсь отправить запрос через FormData от Angular на сторону Spring-Boot. Я еще не решил проблему. Я могу создать запрос с помощью «Почтальон». Клиентская сторона также может ответить на этот запрос. Spring-Boot выдает ошибку, если я пытаюсь отправить его через Angular. Что вызывает эту проблему?
Сторона пружины
@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);
}
}
Angular Сторона
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')});
}
}