Значение, которое я не хочу редактировать из тела json пута, всегда становится нулевым - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть объект отсутствия PUT Запрос с параметрами (comment и dateMissing), которые можно редактировать во внешнем интерфейсе, но проблема в том, что оба должны редактироваться только тогда, когда мы действительно хотим.

Теперь я ограничен, чтобы заполнить параметры комментария и даты в теле JSON запроса PUT , чтобы убедиться, что он работает нормально, запрос работает хорошо, а объект отсутствия хорошо сохранив все данные. Дело в том, что я хотел бы сделать запрос PUT только для одного параметра, например комментария, а параметр dateMissing должен остаться с его исходным значением, а не преобразовываться в NULL, что происходит сейчас. ..

Подводя итог, я просто хочу редактировать параметры моего отсутствия ТОЛЬКО ЕСЛИ я передаю правильные значения в «comment» и «dateMissing» через JSON BODY моего запроса PUT, и если эти параметры являются пустыми в запросе JSON, просто оставьте мои значения по умолчанию для обоих параметров и не преобразуйте их в значения NULL.

Вот мой класс отсутствия:

@Entity
public class Absence {

    @GeneratedValue(strategy=GenerationType.IDENTITY)   
    @Id
    @JsonView(View.Summary.class)
    private int id;

    @JsonView(View.Summary.class)
    private Date dateMissing; 

    @JsonView(View.Summary.class)
    private String comment; 

    @ManyToOne (fetch = FetchType.EAGER)
    @JsonView(View.Summary.class)
    @JoinColumn (name="student_id")
    @JsonProperty(access = Access.READ_ONLY)
    private MyAppUser userStudent;

//GETTERS N SETTERS N CONSTRUCTORS
}

Здесь мой контроллер отсутствия:

    // Edit Absences
    @JsonView(View.SummaryWithOthers.class)
    @PutMapping("api/students/absences")
    public Absence putAbsence(@RequestBody @Valid Absence absence) {

        // if AbsenceRepo is not empty...
        if (!myAbsenceRepository.findAll().isEmpty()) {

            Absence absenceToEdit = myAbsenceRepository.findOneById(absence.getId());

            absenceToEdit.setDateMissing(absence.getDateMissing());
            absenceToEdit.setComment(absence.getComment());
            myAbsenceRepository.save(absenceToEdit);

            return absenceToEdit;

/////////////////////////--IDEA OF WHAT I THINK, BUT DOESN'T WORKS--500 STATUS ERROR --/////////////////////////////
            // I want to fill the date value ONLY if the JSON BODY dateMissing is not empty,
            // if it is empty it have to stay the original dateMissing
            // and not convert to a NULL value!! I think it may be a way to do this similar
            // to the bottom one but this one is returning 500 error when
            // dateMissing is not being edited
            //the idea is check if my json body request is not empty and then fill absence with new date
            //but it isn't working as I excepted...
            if (!absence.getDateMissing().toString().equals("{}")) {
                absenceToEdit.setDateMissing(absence.getDateMissing());
            }
///////////////////////////////////////////////////////////////////////////////////////////////////

        } else {
            return null;
        }

    }

запрос PUT JSON, использующий POSTMAN, который прекрасно работает, и без проблем изменяет оба значения:

{
    "id": "3",
    "dateMissing": "1574856133040",
    "comment": "Ausencia médica"
}

запрос PUT JSON, который работает " почти "хорошо, но, хотя я не редактирую дату, Missing меняется на NULL, и то же самое, если я делаю это с комментарием, конечно:

{
    "id": "3",
    "comment": "Ausencia médica"
}

Извините за мой engli sh и многие многие T спасибо за тебя !!

...