2015-03-09 2 views
0

Для некоторых целей ведения журнала я использую 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'.

Заранее спасибо

+0

Можете ли вы любезно поделиться какой-то кусок кода. Не совсем понятно, что вы пытаетесь сделать. –

+0

Просто объявление репозитория не поможет. Нам нужно знать, какое выражение вы использовали. Методы, которые вы хотели перехватить, и как другой метод перехватывается. Попробуйте дать некоторую релевантную информацию. –

+0

было сделано редактирование – geogeek

ответ

1

Пытались ли вы с @RestResource (вывозимых = ложь) на метод удаления (ID)?

Я просто создал простой проект и, похоже, работает.

Вот код класса хранилища в моем проекте

public interface ProductRepository extends PagingAndSortingRepository<Product, Long> { 
    @RestResource(exported = false) 
    @Override 
    void delete(Long var1); 

    @Override 
    void delete(Product var1); 
} 
+0

Что было бы URI для запроса на удаление в Postman или curl, и мой scanario здесь
http : //stackoverflow.com/questions/43399225/unable-to-retrieve-spring-hateoas-embedded-resource-object-in-case-of-manytoman/43400328 noredirect = 1 # comment74352700_43400328 – Taimur

Смежные вопросы