Mi Frontend se hace con angular. Backend se hace con Java primavera.
Tengo dos entidades essen(meal)
y essensplan (mealplan)
. Cada uno essensplan
consta de cinco objetos de essen
, configurados como ManyToMany relación en Java primavera.
La plantilla de muestra cada objeto de essen
en un selectbox. Con [ngValue]="essen"
que pasar el objeto essen
al método addEssenToEssensplan
en 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/add
y funcionó. Para mí parece que la solicitud POST no llega a mi controlador de primavera de programación Java.
El error está en el objeto de datos. No es necesario poner essensplanId
allí. 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();
}