2017-09-03 7 views
1

次の問題があります。私は、バネデータを使用するアプリケーションを作成し、それをバネデータレストを使用してRESTサービスとして公開しました。カスタム実装が必要になるまで、すべてがスムーズになりました。私はCustomSomethingRepositoryとSomethingRepositoryImplをもう一つの方法で作成しました。 Springのデータ・リポジトリ・インタフェースはCustomSomethingRepositoryを拡張してすべてうまくいきました。テストから直接メソッドを実行でき、カスタム実装も実行されました。それから、私はREST APIを通してそれを取得しようとしました、そして、私はこのメソッドが/ somethings/searchを通して利用できないことに驚いていました。私は春のブート1.3.xとJpaRepositoriesで正常に動作したことをほぼ100%確信しています。今私はブート1.5.xとMongoRepositoryを使用しています。私のサンプルコードを見てみてください:Springデータレストエンドポイントのカスタム実装を公開する方法

@RepositoryRestResource 
public interface SomethingRepository extends CrudRepository<Something>, CustomSomethingRepository { 

    //this one is available in /search 
    @RestResource(exported = true) 
    List<Something> findByEmail(String email); 
} 

とカスタムインタフェース

public interface CustomSomethingRepository { 
    //this one will not be available in /search which is my problem :(
    List<Something> findBySomethingWhichIsNotAnAttribute(); 
} 

@RepositoryRestResource 
public class SomethingRepositoryImpl implements CustomSomethingRepository { 

    @Override 
    public List<Something> findBySomethingWhichIsNotAnAttribute() { 
     return new ArrayList<>(); //dummy code 
    } 
} 

あなたは私に私が一部としてCustomSomethingImplを公開する方法のヒントを与えてもらえ実装この単一の要求をちょうど処理する他の通常のspring mvc beanを作成せずにRest endpointの?

Implementing custom methods of Spring Data repository and exposing them through RESTこれは達成できないと言われていますが、信じられないかと思いますが、私はスプリングブート1.3.xのプロジェクトを持っていました。これらの実装も公開されました:)。

ありがとうございました!

+0

多分私の[HOWTO](https://stackoverflow.com/q/45401734)参考になります。.. – Cepr0

+0

こんにちは、あなたの答えをありがとうございましたが、それはカスタム実装を公開しません、あなたは別のコントローラを作成していますが、これは回避策です。問題は、春のデータレベルから利用可能なカスタム実装を自動的に公開する方法です。 –

+0

私の不注意..)) – Cepr0

答えて

0

あなたのカスタムメソッドはリストを返すので、あなたはSomethingRepositoryにそれを置くべきです。それは春のデータの残りが/ searchパスに置かれます。一覧findByNotAttributeを追加()

@RepositoryRestResource public interface SomethingRepository extends CrudRepository<Something> { 
@RestResource(exported = true) 
List<Something> findByEmail(String email); 

List<Something> findByNotAttribute(@Param String attribute); 
} 
+0

はい、私の目標であるSomethingRepositoryImplのカスタム実装は使用しません。 –

関連する問題