2016-05-18 27 views
1

私はMongoRepository :: findAll()メソッドをオーバーライドして、カスタム@Queryを定義しようとしています。私はSpEL JPA Query support docsに従って、MongoRepositoryに同様のロジックを持たせて、ユーザーの役割をチェックし、承認されたレコードを取得するための動的クエリを作成します。Spring SpELのMongoDB正規表現文字をエスケープする - SpelParseExceptionを取得する

私はMongoRepositoryを拡張して、私のBlogRepositoryで、次の方法のセットアップました:以下のmongoクエリの実行として

org.springframework.expression.spel.SpelParseException: EL1049E:(pos 31): Unexpected data after '.': 'div(/)' 
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.raiseInternalException(InternalSpelExpressionParser.java:988) 
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatDottedNode(InternalSpelExpressionParser.java:407) 
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatNode(InternalSpelExpressionParser.java:360) 
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPrimaryExpression(InternalSpelExpressionParser.java:345) 
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatUnaryExpression(InternalSpelExpressionParser.java:337) 

:私は、このメソッドから次のエラーを取得する

@Query("{ user_id : ?#{ hasRole('ROLE_ADMIN') ? /./ : principal.userId } } ") 
@Override 
Page<Blog> findAll(Pageable pageable); 

をSpELがそれを解析しようとしないように、私は/./文字をエスケープする必要があると思います。

{ 'user_id' : /./ } 

私はSPELのエスケープ文字を見つけたが、次のオプションで演奏し、まだ解析例外の似たようなものが来ていることができませんでした:

  • '/./'
  • #{/./} - SpeIでwraping表現
  • .
  • /.*.*/

私を助けてもらえますか?

答えて

0

私はそれが働いてしまった:

@Query(" ?#{ hasRole('ROLE_ADMIN') ? '{}' : {'user_id' : principal.userId } } ") 
関連する問題