【问题标题】:Customize DELETE method in Spring Data repository在 Spring Data 存储库中自定义 DELETE 方法
【发布时间】: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


【解决方案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);
}

【讨论】:

猜你喜欢
  • 2017-06-18
  • 2017-02-09
  • 2018-10-06
  • 2017-09-19
  • 2018-01-05
  • 2014-02-02
  • 2016-08-29
  • 2016-06-25
  • 1970-01-01
相关资源
最近更新 更多