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();
}