Ich versuche, die MongoRepository :: findAll() -Methode zu überschreiben, um die benutzerdefinierte @Query
zu definieren. Ich folge dem SpEL JPA Query support docs, um ähnliche Logik in MongoRepository zu haben, um nach Benutzerrolle zu suchen und eine dynamische Abfrage zu erstellen, um die autorisierten Aufzeichnungen zu holen.Escape MongoDB Regex-Zeichen in Spring SpEL - Geting SpelParseException
Ich habe die folgende Methode Setup in meinem BlogRepository die MongoRepository erweitert:
@Query("{ user_id : ?#{ hasRole('ROLE_ADMIN') ? /./ : principal.userId } } ")
@Override
Page<Blog> findAll(Pageable pageable);
Ich erhalte die folgende Fehlermeldung aus dieser Methode:
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)
Wie die unten Mongo Abfrage wird ausgeführt, und ich wiederhole die gewünschten Werte, ich glaube, ich muss nur dem /./
Zeichen entkommen, so dass SpEL nicht versucht, es zu parsen.
{ 'user_id' : /./ }
Ich konnte keine Escape-Zeichen für Spel aber spielte mit den folgenden Optionen und noch ähnlicher Art von Parse Ausnahme finden aufkommt:
'/./'
#{/./}
- wraping mit Spel Ausdruck
.
/.*.*/
Können Sie mir helfen?