我正在尝试覆盖MongoRepository :: findAll()方法来定义自定义@Query
。我跟随SpEL JPA Query support docs在MongoRepository中有类似的逻辑来检查用户角色并创建动态查询以获取授权记录。
我在BlogRepository中进行了以下方法设置,扩展了MongoRepository:
@Query("{ user_id : ?#{ hasRole('ROLE_ADMIN') ? /./ : principal.userId } } ")
@Override
Page<Blog> findAll(Pageable pageable);
我从这个方法中得到以下错误:
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)
当下面的mongo查询运行并返回所需的值时,我相信,我只需要转义/./
字符,以便SpEL不会尝试解析它。
{ 'user_id' : /./ }
我找不到SpEL的转义字符但是使用了以下选项,并且仍会出现类似的解析异常:
'/./'
#{/./}
- 使用SpEL表达式进行包装.
/.*.*/
答案 0 :(得分:1)
我得到了它的工作:
@Query(" ?#{ hasRole('ROLE_ADMIN') ? '{}' : {'user_id' : principal.userId } } ")
答案 1 :(得分:0)
可能您可以使用类似的转义功能
%?#{escape(...)}