我想在spring数据休息中使用以下功能。
如果我发布到集合资源端点,服务器应检查该对象是否存在。如果它已经存在,它应该执行与项目资源上的merge-patch相同的功能。如果对象不存在,则应该创建它。
这是否可以在春季数据休息时实现。如果是,那怎么样?
答案 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和更新的实体。