gpt4 book ai didi

java - 在 Spring SpEL 中转义 MongoDB 正则表达式字符 - 获取 SpelParseException

转载 作者:可可西里 更新时间:2023-11-01 10:42:19 26 4
gpt4 key购买 nike

我试图覆盖 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 } } ")

关于java - 在 Spring SpEL 中转义 MongoDB 正则表达式字符 - 获取 SpelParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37301927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com