- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图覆盖 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/
我正在尝试使用 @ConditionalOnExpression("not ${service.synchronous} && not ${service.disabled}") 有条件地创建一个组件
我试图在 int:header 中格式化时间戳,并遇到与 SpEL 相关的奇怪行为(事实上,我已经发现 header-enricher 只能用于静态值,所以我的方法是错误的首先,但我仍然对我遇到的异常
我试图覆盖 MongoRepository::findAll() 方法来定义自定义 @Query。我正在关注 SpEL JPA Query support docs在 MongoRepository
下面的代码是在 Spring Integration 2.2.6 中设置 MessageHeader 的 'NEW' 键。 public Message getFlow() { return
我是一名优秀的程序员,十分优秀!