RequestParam无法捕获从Angular发送的值

问题描述 投票:0回答:1

我尝试通过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')});
  }
}
angular spring-boot
1个回答
0
投票

您在后端中使用了错误的注释。您需要使用@RequestBody而不是@RequestParam,后者会以查询参数的形式从您的API接收数据,而不是从请求的body接收。

© www.soinside.com 2019 - 2024. All rights reserved.