一尘不染

在Spring数据存储库中自定义DELETE方法

spring-boot

对于一些日志记录的目的,我使用AspectJ登录CRUD操作,删除操作我支持我只repository.delete(object)所以repository.delete(id)不被支持,但同时在Spring数据仓库使用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’的函数调用。

提前致谢


阅读 388

收藏
2020-05-30

共1个答案

一尘不染

您是否尝试过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);
}
2020-05-30