保存或合并补丁实体

时间:2017-09-12 16:05:30

标签: spring-data-rest

我想在spring数据休息中使用以下功能。

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

这是否可以在春季数据休息时实现。如果是,那怎么样?

1 个答案:

答案 0 :(得分:0)

如果在您的用例中可能,您可能希望使用PUT而不是POST,因为PUT应该按预期工作。

POST解决方案

您可以使用Spring Data REST Event handlers实现所需的行为。

只需创建一个Handler方法,该方法接受您的实体并使用@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和更新的实体。