【发布时间】:2015-05-10 19:17:48
【问题描述】:
出于某些记录目的,我使用 AspectJ 记录 CRUD 操作,对于删除操作,我只支持 repository.delete(object) 所以不支持 repository.delete(id),但是在 Spring Data 存储库中使用 http 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 'ressource_url/ id' 被调用。
提前致谢
【问题讨论】:
-
你能分享一些代码吗?目前尚不清楚您要做什么。
-
只是存储库声明无济于事。我们需要知道你使用了什么表达方式。您要拦截的方法,以及其他方法如何被拦截..尝试提供一些相关信息..
标签: spring rest spring-boot spring-data-rest