gpt4 book ai didi

java - Spring 数据休息 : Limit sending values on Update method

转载 作者:行者123 更新时间:2023-11-30 10:06:37 26 4
gpt4 key购买 nike

我已经使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com