对于某些日志记录目的,我使用AspectJ来记录CRUD操作,对于删除操作,我只支持repository.delete(object)
,因此不支持repository.delete(id)
,但使用http时在Spring Data存储库中调用DELETE,我拦截repository.findOne()
然后repository.delete(id)
调用。
我的问题
我如何在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&#39; ressource_url / id&#39;被叫。
提前致谢
答案 0 :(得分:1)
您是否尝试使用@RestResource(exported = false)删除(id)方法?
我刚刚创建了一个简单的项目,它似乎有效。
以下是我项目中的存储库类的代码
public interface ProductRepository extends PagingAndSortingRepository<Product, Long> {
@RestResource(exported = false)
@Override
void delete(Long var1);
@Override
void delete(Product var1);
}