アンギュラ:複数のパラメータを持つHTTP POSTが動作しません

CENASA:

私のフロントエンドは、角で作られています。バックエンドはJavaの春で作られています。

私は2つのエンティティを持っているessen(meal)essensplan (mealplan)それぞれessensplanの5つのオブジェクトで構成されessenたJavaの春で多対多の関係として設定され、。

テンプレートのすべてのオブジェクトを表示するessen選択ボックスで。[ngValue]="essen"私はオブジェクトを渡すessen方法にaddEssenToEssensplan私のコンポーネントとサービスインチ

essensplan-detail.component.html

<form *ngIf="essensplan">
 <div class="form-group">
  <select [(ngModel)]="essen" class="form-control" [ngModelOptions]="{standalone: true}">
    <option *ngFor="let essen of speisekarte" [ngValue]="essen" label="{{essen.name}}"></option>
    </select>
  </div>
    <button (click)="addEssenToEssensplan(essen)" type="button" class="btn btn- 
    primary">Hinzufügen</button>
</form>

essensplan-detail.component.ts

  addEssenToEssensplan(essen: Essen): void {
    this.essensplanService.addEssenToEssensplan(this.essensplan, essen);
  }

essensplan.service.ts

  addEssenToEssensplan(essensplan: Essensplan | number, essen: Essen): Observable<Essen> {
    const essensplanId = typeof essensplan === 'number' ? essensplan : essensplan.id;
    const currentEssen = essen;
    const url = `${this.essensplanUrl}/${essensplanId}/add`;
    const data = {id: essensplanId, essen: currentEssen};
    return this.http.post<Essen>(url, data);
  }

Javaの春のコントローラ

    @PostMapping(path = "/{id}/add")
    public void addEssenToEssensplan(@PathVariable("id") int id, @RequestBody Essen essen) {
        essensplanService.addEssenToEssensplan(id, essen);
    }

サービス:

    @Transactional
    public Essensplan addEssenToEssensplan(int id, Essen essen) {

        Optional<Essensplan> optionalEssensplan = essensplanRepository.findById(id);
        if (optionalEssensplan.isPresent()) {
             Essensplan essensplan = optionalEssensplan.get();
            essensplan.getEssenProWoche().add(essen);
            return essensplan;
        } else return null;
    }

私はすでに、たとえばとポストマンクライアントを経由してPOSTリクエストを作りhttp://localhost:8080/essensplan/2/add、それが働きました。私にとってそれは私のJavaの春コントローラに到達していないPOSTリクエストのように思えます。

オスカー・ゲラン:

エラーは、データオブジェクトです。あなたが置く必要はありませんessensplanIdが。これは、リクエストボディが、PathVariableの一部ではありません。

試してみてください。

    addEssenToEssensplan(essensplan: Essensplan | number, essen: Essen): Observable<Essen> {
        const essensplanId = typeof essensplan === 'number' ? essensplan : essensplan.id;
        return this.http.post<Essen>(`${this.essensplanUrl}/${essensplanId}/add`, {essen});
    }

編集:

あなたはまた、いくつかの時間や他の要求が実行されることはありませんで、あなたの観測可能に加入する必要があります。

  addEssenToEssensplan(essen: Essen): void {
    this.essensplanService.addEssenToEssensplan(this.essensplan, essen).subscribe();
  }

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=318723&siteId=1