2016-05-05 4 views
0

つまり、バージリポジトリの次のクエリメソッドでは、HTTP要求からaとbのどちらも必要ではありません。リポジトリレベルでこれらのパラメータの存在を強制することは可能ですか?Spring Repository Query Methodでは、存在を強制することは可能ですか、パラメータが必要ですか?

私はクライアントに公開するAPIを明示したいと思います。現在、params、a、b、& bは、公開されたエンドポイントによってすべて受け入れられません。しかし、私は&を公開したいだけです。

List<Thing> findByBAndC(@Param(value="a") Long a,@Param(value="b") Long b); 

答えて

1

それを行うには任意の春データ方法を知ってはいけない、しかしspontanously私はいくつかの方法を考えることができます...

あなたは「両方が存在する場合にのみ、カスタム@queryを(使用することができますそれが十分であれば何かが返されます)

@PreAuthorizeでセキュリティを使用して、両方のパラメータがnullではないかどうかを調べることができます。

たぶん私は考えることができる最も簡単な(と少なくとも臭い)の方法は、メソッドの周りにラップし、両方のパラメータの例外をスローし、独自のAspectが存在しない記述することです...たとえば、独自のカスタムアノテーションを作成します私は

@Around("@annotation(com.example.AllParametersRequired.class)") 
public Object throwExceptionOnMissingParameters(ProceedingJoinPoint pjp) throws Throwable { 
     int nullCount = Arrays.stream(pjp.getArgs()).filter(o -> o == null).count(); 
     if (nullCount > 0) throw new RuntimeException("Null is not allowed.); 
     return pjp.proceed(); 
} 

あなたはおそらく、あなたのケースに最適なポイントカット見て、そこに少し実験する必要がありますが、:、あなたのメソッドの前にそれを配置し、側面、(テストしていない)のような何かを書きますなぜSpring Dataのリポジトリメソッドについての面を包むことができないべきではないのか分かりません。とにかく、Spring AOPのドキュメントへのリンクがあります。あなたがそのようにしたい場合にはおそらく役に立ちます:Link

関連する問題