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