春季启动补丁
Posted
技术标签:
【中文标题】春季启动补丁【英文标题】:Spring boot PATCH 【发布时间】:2017-11-19 01:40:19 【问题描述】:当我阅读文档时 (https://spring.io/guides/gs/accessing-data-rest/)
PUT 替换整个记录。未提供的字段将被替换 与空。 PATCH 可用于更新项目的子集。
所以,我尝试为我的用户实体使用 PATCH,其中包含 2 个字段(姓名和姓氏)
@RequestMapping(path="/user/id", method = RequestMethod.PATCH)
public User updateUser ( User user)
return userRepository.save(user);
当我发送到:
localhost:8080/user/34
带有name: "user" and surname: "testSurname"
的主体效果很好。
但是当我只发送name (without surname)
时,surname 也会更新为 null。
如何防止 Spring Boot 更新具有空值的字段?
【问题讨论】:
userRepository.save(department)
department
是什么?你是说userRepository.save(user)
吗?
您链接到的指南是关于为您提供 RESTful 端点的 Spring Data REST。在您的问题中,您已经编写了自己的端点,由您决定PATCH
的行为方式
我整理了一个 post,描述了在 Spring 中使用 PATCH
的方法。 GitHub 上提供了一个工作示例。
【参考方案1】:
您在这里没有使用 Spring Data Rest。您正在使用 spring 数据 jpa 存储库userRepository.save(department);
通过创建您的自定义 http 端点和 Spring MVC。
@RequestMapping(path="/user/id", method = RequestMethod.PATCH)
public User updateUser ( User user) ...
要查看您描述的补丁行为,您必须使用 spring data rest 公开的端点,而不是您制作的自定义端点。 当您创建自定义端点时,它将完全按照您编写的代码执行,spring 不会弄乱您的代码并改变行为。
【讨论】:
我找不到任何有用的信息。可以举个例子吗? @Sever 你可以在项目的官方页面上找到很多信息 - projects.spring.io/spring-data-rest 和 projects.spring.io/spring-data-jpa 你可能想检查项目的概念(他们应该做什么)。您已经找到的指南也是很好的资源。 嗨,是否可以有一个自定义的 http 端点,但仍然有 spring 使用来自 HTTP 请求的新值更新实体?所以我可以在客户方法中手动处理现在更新的实体? @user2049132 抱歉我没看懂问题 @EvgeniDimitrov 我想使用自定义 http 端点,但是当我在方法中使用它时,让 spring 将更新的值从请求合并到实体。这个方法里面@RequestMapping(path="/user/id", method = RequestMethod.PATCH) public User updateUser ( User user)
以上是关于春季启动补丁的主要内容,如果未能解决你的问题,请参考以下文章