首页 > 解决方案 > 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')});
  }
}

标签: angularspring-boot

解决方案


推荐阅读