我正在记录字段,这些字段将在更新Api呼叫期间更新. 但无论是否更新,每次都会得到道布的字段
道布属于日期型
private Date DOB;
在有效载荷{ "DOB": "1990-01-01"}
中传递此参数时记录道布值
dob: Mon Jan 01 05:30:00 IST 1990
Updated Fields during request: DOB
是因为它也有时间吗?虽然我得到了相同的时间,但仍然是打印道布即使在价值相同而没有更新的情况下也更新.为什么会这样呢?
如果我像这样在有效载荷(postman )中超过道布
"DOB": "20101212"
//it is printing only this 1970 value on log console
dob: Thu Jan 01 11:05:01 IST 1970
我该如何处理这些情况呢?
代码
public static class Updater {
private final OrgEmployeeMap existing;
private final EmployeeInformation information;
private final Set<String> updatedFields = new HashSet<>();
public Updater(OrgEmployeeMap existing, EmployeeInformation information) {
this.existing = existing;
this.information = information;
}
public <T> Updater update(String fieldName,
Function<EmployeeInformation, T> newValueGetter,
Function<OrgEmployeeMap, T> oldValueGetter,
BiConsumer<OrgEmployeeMap, T> oldValueSetter) {
final var newValue = newValueGetter.apply(information);
final var oldValue = oldValueGetter.apply(existing);
if (newValue == null || newValue.equals(oldValue)) {
return this;
}
this.updatedFields.add(fieldName);
oldValueSetter.accept(existing, newValue);
return this;
}
public Set<String> getUpdatedFields() {
return updatedFields;
}
}
private void updateExistingEmployee(OrgEmployeeMap existingOrgEmployee, RequestMessage requestMessage) {
try {
EmployeeInformation employeeInfo = requestMessage.getData().get(0).getDemographicData().getEmployeeInformation().get(0);
final var updater = new Updater(existingOrgEmployee, employeeInfo);
updater
.update("FirstName", EmployeeInformation::getEmployeeFirstName, OrgEmployeeMap::getFirstName, OrgEmployeeMap::setFirstName)
.update("LastName", EmployeeInformation::getEmployeeLastName, OrgEmployeeMap::getLastName, OrgEmployeeMap::setLastName)
.update("DOB", EmployeeInformation::getDOB, OrgEmployeeMap::getDob, OrgEmployeeMap::setDob)
.update("Gender", EmployeeInformation::getGender, OrgEmployeeMap::getGender, OrgEmployeeMap::setGender)
.update("Email", EmployeeInformation::getEmail, OrgEmployeeMap::getEmail, OrgEmployeeMap::setEmail);
final var modifiedFields = updater.getUpdatedFields();
if (!modifiedFields.isEmpty()) {
log.info("Updated employee : " + String.join(", ", modifiedFields));
}
orgEmployeeMapRepository.save(existingOrgEmployee);
log.info("Updated Employee : " + existingOrgEmployee);
} catch (JSONException e) {
log.error("error in processing the request error", e.getMessage());
} catch (Exception ex) {
log.error("An unexpected error occurred: " + ex.getMessage(), ex);
}
}
DTO类
@Data
public class EmployeeInformation {
@JsonProperty(value = "Email")
private String Email;
@JsonProperty(value = "EmployeeFirstName")
private String EmployeeFirstName;
@JsonProperty(value = "EmployeeLastName")
private String EmployeeLastName;
@JsonProperty(value = "DOB")
private Date DOB;
..
}
模型类
@Data
@Entity
@Table(name = "employee")
public class EmployeeMap {
@Id
@Column(name = "Id", length = 100, nullable = false)
private String Id;
@Column(name = "firstName", length = 100, nullable = false)
private String firstName;
@Column(name = "lastName", length = 100)
private String lastName;
@Column(name = "email", length = 100, nullable = false)
private String email;
@Column(name = "gender")
private String gender;
@Column(name = "dob", nullable = false)
private Date dob;
}