#java #json #angular #spring-boot
#java #json #угловой #spring-boot
Вопрос:
Я использую веб-приложение angular springboot, в котором объект (для этого примера — объект клиники), полученный из springboot в angular, не изменяется, а затем отправляется обратно в springboot, и некоторые из его свойств без видимой причины просто становятся нулевыми, а другие (логическое свойство получает значениеиз false, а целочисленные свойства получают значение 0) получают значения по умолчанию.
Это таблица, в которой объекты клиники отображаются без отображения и из которой открывается модальное обновление клиники.
<table class="table">
<thead>
<tr>
<th scope="col" style="text-align:right;"></th>
<th scope="col" style="text-align:right;">State</th>
<th scope="col" style="text-align:right;">Foundation Year</th>
<th scope="col" style="text-align:right;">Supervisor</th>
<th scope="col" style="text-align:right;">Clinic Name</th>
</tr>
</thead>
<tbody>
<tr [ngClass]="{'not-active-clinic':!clinic.active}" *ngFor="let clinic of clinics">
<td style="text-align:right;">
<button class="btn-primary mr-1" (click)="openEditModal(editModal,clinic)"><i
class="fa fa-edit"></i></button>
<!--Edit Modal -->
<ng-template #editModal let-modal>
<div class="modal-header">
<h4 class="modal-title" id="modal-basic-title">Clinic Edit</h4>
<button style="margin-left: 0;" type="button" class="close" aria-label="Close"
(click)="modal.dismiss('Cross click')">
<span aria-hidden="true">amp;times;</span>
</button>
</div>
<div class="modal-body">
<form dir="rtl">
<div class="row">
<div class="col-3">
<label>
Clinic Name: </label>
</div>
<div class="col-9">
<input style="width: 100%;" type="text" name="clinicName"
[(ngModel)]="edittedClinic.clinicName">
</div>
</div>
<div class="row">
<div class="col-3">
<label>
Supervisor</label>
</div>
<div class="col-9">
<select (change)="onChange()" style="width: 100%;"
name="clinicalSupervisorId"
[(ngModel)]="edittedClinic.clinicalSupervisorId">
<option *ngFor="let s of supervisors" [value]="s.id">
{{s.firstName ' ' s.lastName}}
</option>
</select>
</div>
</div>
<div class="row">
<div class="col-3">
<label>
description:</label>
</div>
<div class="col-9">
<textarea style="width: 100%;height:350px"
[(ngModel)]="edittedClinic.description" name="description">
</textarea>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-dark"
(click)="modal.close('Save click');onEdit(clinic)">Edit</button>
</div>
</ng-template>
<button class="btn btn-sm btn-danger btn-delete-account"
(click)="openDeleteModal(deleteModal)">
<span class="spinner-border spinner-border-sm"><i
class="fa fa-trash-alt"></i></span>
</button>
<!--Delete Modal -->
</td>
<td style="text-align:right;">
<button (click)="onChangeClinicState(clinic)">
{{clinic.active?"Add To Archive":"Restore"}}</button>
</td>
<td style="text-align:right;">{{clinic.yearFounded}}</td>
<td style="text-align:right;">{{clinic.clinicalSupervisorId}}</td>
<td style="text-align:right;">{{clinic.clinicName}}</td>
</tr>
</tbody>
</table>
Это метод в angular для извлечения отредактированного объекта для отправки его в службу, в которой есть http-вызов для отправки объекта клиники в springboot:
onEdit(clinicToEdit:Clinic)
{
this.dashboardService.updateClinicDetails(this.edittedClinic).subscribe(
data=>{
clinicToEdit=Object.create(this.edittedClinic);
},
err=>{
}
)
}
Это метод в службе для отправки http-вызова put
updateClinicDetails(clinic:Clinic)
{
return this.http.put(BASE_URL `/api/v1/clinic/${clinic.clinicName}`,clinic);
}
Это метод API в springboot для получения объекта клиники, отправленного из angular.
@PutMapping(path = "{clinicName}")
public int updateClinicById(@PathVariable("clinicName") String clinicName, @RequestBody Clinic clinicToUpdate)
{
return clinicService.updateClinic(clinicName, clinicToUpdate);
}
Это конструктор объекта clinic, вызываемый для извлечения JSON, отправленного в springboot из angular.
public Clinic(@JsonProperty("clinicName") String clinicName,
@JsonProperty("clinicalSupervisorId") int clinicalSupervisorId,
@JsonProperty("description") String description, @JsonProperty("yearFounded") int yearFounded,
@JsonProperty("active") boolean active)
{
this.clinicName = clinicName;
this.clinicalSupervisorId = clinicalSupervisorId;
this.yearFounded = yearFounded;
this.description = description;
this.active = active;
}
Теперь, дело в том, что при изменении эти упомянутые свойства не содержат нулевых значений или их значений по умолчанию, каково объяснение этому и каков наилучший способ его решения?
Комментарии:
1. Вы видите их в angular как не измененные. Но вы видите их как консоль. log, что означает строковое представление. Поделитесь с нами своим кодом angular. Там наверняка что-то искажено.
2. @Boug Я добавил немного кода