我们可以在其他注释中使用 spring 表达式(spel)吗?

2024-01-02

我希望能够做到这一点:

@Controller
@RequestMapping("/#{handlerMappingPaths.security}/*")
public class SecurityController {
  etc

  //for instance, to resuse the value as a base for the folder resolution     
  @Value("#{handlerMappingPaths.security}/")
  public String RESOURCE_FOLDER;

  @RequestMapping(value="/signin-again", method = RequestMethod.GET)
    public String signinAgainHandler() {
        return RESOURCE_FOLDER + "signin_again";
    }
}

这现在似乎不起作用,我错过了什么吗?


找到此类问题的一种方法是亲自查看。这是 Eclipse 的示例,但它对于其他 IDE 的工作方式应该类似:

首先,确保您拥有正在使用的 spring 库的源代码。如果你使用maven,这是最简单的,使用 maven-eclipse-plugin http://maven.apache.org/plugins/maven-eclipse-plugin/examples/attach-library-sources.html或使用m2eclipse http://m2eclipse.sonatype.org/.

然后,在 Eclipse 中选择Navigate -> Open Type...。输入您要查找的类型(例如RequestMa*应该适合像我这样的懒打字员)。输入/确定。现在右键单击源文件中的类名并选择References -> Project。在搜索视图中,将显示此类或注释的所有使用。

其中之一是DefaultAnnotationHandlerMapping.defineUrlsForHandlerMethods(类,布尔值) http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/mvc/annotation/DefaultAnnotationHandlerMapping.html#determineUrlsForHandlerMethods%28java.lang.Class,%20boolean%29,其中此代码片段将告诉您表达式语言未求值:

ReflectionUtils.doWithMethods(currentHandlerType, new ReflectionUtils.MethodCallback() {
    public void doWith(Method method) {
        RequestMapping mapping = AnnotationUtils.findAnnotation(
                                     method, RequestMapping.class);
        if (mapping != null) {
            String[] mappedPatterns = mapping.value();
            if (mappedPatterns.length > 0) {
                for (String mappedPattern : mappedPatterns) {
                    // this is where Expression Language would be parsed
                    // but it isn't, as you can see
                    if (!hasTypeLevelMapping && !mappedPattern.startsWith("/")) {
                        mappedPattern = "/" + mappedPattern;
                    }
                    addUrlsForPath(urls, mappedPattern);
                }
            }
            else if (hasTypeLevelMapping) {
                urls.add(null);
            }
        }
    }
}, ReflectionUtils.USER_DECLARED_METHODS);

请记住,它称为开源。如果您不尝试了解自己正在使用什么,那么使用开源软件就没有意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们可以在其他注释中使用 spring 表达式(spel)吗? 的相关文章

随机推荐

  • 具有滚动背景的 Recyclerview

    我正在尝试创建一个具有滚动背景的 RecyclerView 如下所示 这个想法是 当我向上 向下滚动视图保持器时 背景 浅绿色 图像也应该同步向上 向下移动 关于如何实现这一目标有任何线索吗 这是我的基本 RecyclerView 配置
  • 使用特定 SA 通过 Cloud Build 部署 Dataflow 管道

    我竭尽全力尝试使用特定 SA 而不是默认的 Cloud Build SA 从 Cloud Build 部署数据流管道 但到目前为止尚未成功 我遵循了这个过程 https cloud google com build docs secure
  • 将值从一种方法返回到另一种方法

    Assume as precondition that the list of players is not empty Returns the winning score that is the lowest total score re
  • 将非 ASCII/UTF-8 字符转换为 LaTeX 代码

    我们必须将非 ASCII UTF 8 或命名实体字符转换为 LaTeX 代码 现在我们使用非 ASCII 到 Unicode 然后使用 Perl 脚本将 Unicode 转换为 LaTeX 实体 例如 oacute gt o x000F3
  • python-requests post 带有 unicode 文件名

    我已经在这里阅读了几个相关的问题 但没有找到可行的解决方案 我有一个 Flask 服务器 其中包含以下简化代码 app Flask name api Api app class SendMailAPI Resource def post s
  • 使用 Excel VBA 更改连接字符串时创建的新数据连接

    我有一个工作簿 其中包含由宏更新的数据透视表 不过 在刷新数据之前 连接字符串会发生更改 With ThisWorkbook Connections Data ODBCConnection Connection Redacted Comma
  • 如何通过谷歌表格上的查询比较日期或日期与今天?

    我正在努力将sheet1的副本复制到另一个sheet2 同一文档 上 并且query 工作得很好 直到我想要过滤的列是公式单元格 每个都有查询 匹配等的长单元格 我想要做的是过滤sheet1中的行 其中M列中的事件日期即将到来 有更多过滤条
  • JPA 创建 - Hibernate 未显示在平台中

    我正在尝试创建一个使用 Hibernate 作为持久性提供者的 JPA 项目 但是当我单击平台时 它没有显示 Hibernate 它在平台下拉框中显示 Generic 和 EclipseLink 我应该怎么做才能在下拉框下获得 Hibern
  • Python os.system 命令不起作用?

    早些时候 我曾经很好地使用 python 进行编码 但是在我格式化计算机并重新安装相同的 python 设置之后 我的os system命令停止工作 以及subprocess Popen 看来是路径问题 我重现该 1 错误的唯一方法是将路径
  • 我如何告诉 PyCUDA 使用哪个 GPU?

    我的机器中有两张 NVidia 卡 并且都支持 CUDA 当我运行示例脚本以开始使用此处所示的 PyCUDA 时 http documen tician de pycuda http documen tician de pycuda 我得到
  • 使用 ECS Fargate 执行 Step Function“任务”

    在 Re Invent 2018 中 AWS 似乎推出了与 Step Functions 的新集成 其中包括 ECS Fargate 支持 https docs aws amazon com step functions latest dg
  • c_include_path 与 ld_library_path

    在 Ubunutu 12 04 或 Springdale 6 4 上 使用 gcc 和 g 有什么区别C INCLUDE PATH or CPLUS INCLUDE PATH and LD LIBRARY PATH 是个LD一个仅在运行时使
  • 异常消息是英文的吗?

    我们通过将 Exception Message 写入文件来记录系统中发生的任何异常 然而 它们是根据客户的文化编写的 土耳其的错误对我来说意义不大 那么我们如何才能在不改变用户文化的情况下用英语记录错误消息呢 这个问题可以部分解决 框架异常
  • 什么是接口断言?

    我刚刚遇到了这段代码 type Logger interface Debug msg string keyvals interface error Info msg string keyvals interface error Error
  • Python 使用 tenacity 模块重试

    我很难获得坚韧图书馆 https github com jd tenacity按预期工作 下面测试中的重试根本不会触发 我希望每 5 秒重试一次 并让日志文件反映重试尝试 import paramiko import tenacity fr
  • 是否可以设置规则的优先级以避免“最长最早”的匹配模式?

    另一个简单的问题 有没有办法告诉 flex 更喜欢匹配短事物的规则而不是匹配长事物的规则 我找不到任何关于这方面的好的文档 这就是我需要它的原因 我解析一个伪语言文件 其中包含一些与控制指令相对应的关键字 我希望它们成为绝对优先级 这样它们
  • WebAPI OData 日期时间错误

    同样的问题在这里被问到http forums asp net post 5243863 aspx http forums asp net post 5243863 aspx但还没有答案 像 filter TimeRequested eq d
  • 通过 terraform 部署的 AWS API Gateway 和 Lambda 函数 -- 由于配置错误而执行失败:Lambda 函数的权限无效

    我正在通过 Terraform 一起部署 API 网关和 Lambda 函数 而 Lambda 函数应该由 API 网关触发 资源成功部署后 我测试 API 网关并得到响应 message 内部服务器错误 API网关的实际日志显示 由于配置
  • 使 html 表格中的第一列固定,下一列可滚动

    我有一个只有两列的表 我想让第一列固定 下一列在所有行中可滚动 它应该作为一个整体水平滚动 而不是单个列 可以有数百行 我这里有一个演示代码Jsfiddle http jsfiddle net Yw679 1 我对 css 样式接触不多 你
  • 我们可以在其他注释中使用 spring 表达式(spel)吗?

    我希望能够做到这一点 Controller RequestMapping handlerMappingPaths security public class SecurityController etc for instance to re