【发布时间】:2016-05-18 14:02:31
【问题描述】:
我正在尝试重写 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 表达式包装 ./.*.*/
你能帮帮我吗?
【问题讨论】:
标签: java spring mongodb spring-boot spring-el