Объект, полученный из серверной части springboot и отправленный обратно, имеет поля, содержащие нулевые значения

#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 Я добавил немного кода