对于一些日志记录的目的,我使用AspectJ登录CRUD操作,删除操作我支持我只repository.delete(object)所以repository.delete(id)不被支持,但同时在Spring数据仓库使用HTTP DELETE召唤,我拦截repository.findOne()然后repository.delete(id)调用。
repository.delete(object)
repository.delete(id)
repository.findOne()
我的问题
我如何在Spring Data存储库中自定义Http DELETE方法以repository.delete(object)不调用它repository.delete(id)。
这是存储库界面:
package com.geopro.repositories; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.rest.core.annotation.RepositoryRestResource; import com.geopro.entities.Product; @RepositoryRestResource(collectionResourceRel = "product", path = "product") public interface ProductRepository extends PagingAndSortingRepository<Product, Long> { }
AspectJ代码:
@Pointcut("execution(public * org.springframework.data.repository.Repository+.*(..))") public void publicNonVoidRepositoryMethod() { } @Around("publicNonVoidRepositoryMethod()") public Object publicNonVoidRepositoryMethod(ProceedingJoinPoint pjp) throws Throwable { if (pjp.getArgs()[0].getClass().getName() == "java.util.Arrays$ArrayList" || pjp.getArgs()[0].getClass().getName() == "java.util.LinkedList") { Iterable arr = (Iterable) pjp.getArgs()[0]; return saveHistoriqueOperation2(pjp, arr); } else { Object objs = pjp.getArgs()[0]; if (objs.getClass().getName() == "com.geopro.entities.HistOperation") { Object o = pjp.proceed(); return o; } return saveHistoriqueOperation(pjp, objs); } }
我正在管理objs实体对象的情况,所以我所有的删除操作都使用delete(entity_object),而不是delete(id),我正在寻找一种方法来修改调用http DELETE’ressource_url / id’的函数调用。
objs
delete(entity_object)
delete(id)
提前致谢
您是否尝试过delete(id)方法上的@RestResource(exported = false)?
我刚刚创建了一个简单的项目,它似乎可以工作。
这是我项目中存储库类的代码
public interface ProductRepository extends PagingAndSortingRepository<Product, Long> { @RestResource(exported = false) @Override void delete(Long var1); @Override void delete(Product var1); }