在 Spring SpEL 中转义 MongoDB 正则表达式字符 - 获取 SpelParseException
Escape MongoDB regex character in Spring SpEL - getting SpelParseException
我正在尝试覆盖 MongoRepository::findAll() 方法来定义自定义 @Query
。我正在按照 SpEL JPA Query support docs 在 MongoRepository 中使用类似的逻辑来检查用户角色并创建动态查询以获取授权记录。
我在扩展 MongoRepository 的 BlogRepository 中设置了以下方法:
@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 表达式换行
.
/.*.*/
你能帮帮我吗?
我成功了:
@Query(" ?#{ hasRole('ROLE_ADMIN') ? '{}' : {'user_id' : principal.userId } } ")
也许你可以使用像
这样的转义函数
%?#{escape(...)}
我正在尝试覆盖 MongoRepository::findAll() 方法来定义自定义 @Query
。我正在按照 SpEL JPA Query support docs 在 MongoRepository 中使用类似的逻辑来检查用户角色并创建动态查询以获取授权记录。
我在扩展 MongoRepository 的 BlogRepository 中设置了以下方法:
@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 表达式换行.
/.*.*/
你能帮帮我吗?
我成功了:
@Query(" ?#{ hasRole('ROLE_ADMIN') ? '{}' : {'user_id' : principal.userId } } ")
也许你可以使用像
这样的转义函数%?#{escape(...)}