Angular: HTTP POST con múltiples parámetros no trabajan

Cenasa :

Mi Frontend se hace con angular. Backend se hace con Java primavera.

Tengo dos entidades essen(meal)y essensplan (mealplan). Cada uno essensplanconsta de cinco objetos de essen, configurados como ManyToMany relación en Java primavera.

La plantilla de muestra cada objeto de essenen un selectbox. Con [ngValue]="essen"que pasar el objeto essenal método addEssenToEssensplanen mi componente y el servicio.

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

Controlador de primavera en Java

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

Servicio:

    @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;
    }

Ya he hecho una petición POST a través del cartero con el cliente por ejemplo, http://localhost:8080/essensplan/2/addy funcionó. Para mí parece que la solicitud POST no llega a mi controlador de primavera de programación Java.

Oscar Guérin:

El error está en el objeto de datos. No es necesario poner essensplanIdallí. No es parte del cuerpo de la petición, sino una PathVariable.

Tratar :

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

Editar:

También es necesario suscribirse a su observables en algún momento o de lo contrario la solicitud nunca se ejecutará:

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=318726&siteId=1
Recomendado
Clasificación