Для некоторых целей ведения журнала я использую AspectJ для регистрации операций CRUD, для операции удаления я поддерживаю только repository.delete(object)
, поэтому repository.delete(id)
не поддерживается, но при использовании вызова http DELETE в Spring Data репозиторий, i перехват repository.findOne()
, затем repository.delete(id)
звонки.Настроить метод DELETE в Spring Data repository
Мой вопрос
Как я мог настроить Http УДАЛИТЬ метод в хранилище данных Spring для вызова 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'.
Заранее спасибо
Можете ли вы любезно поделиться какой-то кусок кода. Не совсем понятно, что вы пытаетесь сделать. –
Просто объявление репозитория не поможет. Нам нужно знать, какое выражение вы использовали. Методы, которые вы хотели перехватить, и как другой метод перехватывается. Попробуйте дать некоторую релевантную информацию. –
было сделано редактирование – geogeek