保存或合并补丁实体



我想要弹簧数据中的以下功能。

如果我发布到集合资源终点,服务器应检查对象是否存在。如果已经存在,则应执行与项目资源上的合并点相同的功能。如果对象尚不存在,则应该创建它。

在春季数据休息中可以实现的。如果是这样?

如果在您的用例中可能可以使用PUT代替帖子,则如您预期的那样工作。

解决方案

您可以通过春季数据休息事件处理程序实现所需的行为。

只需创建一个接受您的实体并用@HandleBeforeCreate注释的处理程序方法即可。在此方法中,您可以实现您的行为,即检查对象是否存在并手动更新它,或者什么也不做,然后让Spring Data Rest处理实体创建。

@RepositoryEventHandler 
public class EntityEventHandler {
   @Autowired
   private EntityService entityService;
   @HandleBeforeCreate
   public void handleEntityCreate(Entity e) {
      if (entityService.exists(e)) {
         entityService.update(e);
      }
   }
}

编辑:我只是意识到您还需要在更新后停止创建事件。您可以尝试抛出自定义异常并处理以返回200和更新的实体。

最新更新