我已经使用 Spring-Data-Rest 按项目实现。我正在尝试对表中的现有记录进行更新。但是,当我尝试通过我的请求仅发送几个字段而不是所有字段(存在于实体类中)时,Spring-Data-Rest 认为我正在发送 null/空值。最后,当我去查看数据库时,我没有通过我的请求发送的字段被 null/空值覆盖。所以我的理解是,即使我没有发送这些值,spring data rest 也会在 Entity 类中看到它们并将这些值作为 null/empty 发送。我的问题是,有没有办法在执行更新时禁用我没有通过请求发送的字段。感谢您的帮助。
更新:我正在使用 PUT 方法。阅读评论后,我将其更改为 PATCH 并且现在可以完美运行。感谢所有帮助
最佳答案
更新前,从数据库加载对象,使用jpa方法findById
返回对象调用target
。
然后从object-want-to-update
复制所有非null/empty字段到target
,最后保存target
对象。
这是代码示例:
public void update(Object objectWantToUpdate) {
Object target = repository.findById(objectWantToUpdate.getId());
copyNonNullProperties(objectWantToUpdate, target);
repository.save(target);
}
public void copyNonNullProperties(Object source, Object target) {
BeanUtils.copyProperties(source, target, getNullPropertyNames(source));
}
public String[] getNullPropertyNames (Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
PropertyDescriptor[] propDesList = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<String>();
for(PropertyDescriptor propDesc : propDesList) {
Object srcValue = src.getPropertyValue(propDesc.getName());
if (srcValue == null) {
emptyNames.add(propDesc.getName());
}
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
}
关于java - Spring 数据休息 : Limit sending values on Update method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54578753/