API version specified, but no ApiVersionStrategy configured

1. springboot4 支持版本控制

没有配置版本策略时,启动报错.

@RestController
public class VersionController {

    @Autowired
    private User user;

    @Autowired
    private Article article;

    @Value("${dynamic.property:default}")
    private String dynamicProperty;


    @GetMapping(value = "/test", version = "1.0")
    public String getVersion1() {
        System.out.println(article);
        System.out.println(user);
        return String.format("1.0.0 config: %s",  dynamicProperty) ;
    }

    @GetMapping(value = "/test", version = "2.0")
    public String getVersion2() {
        return "2.0.0";
    }

    @GetMapping(value = "/test/{version}")
    public String getVersion3(@PathVariable("version") String version) {
        return "3.0.0";
    }
}

2. 报错信息如下:

Caused by: java.lang.IllegalStateException: Invalid mapping on handler class [com.nextera.boot4.controller.VersionController]: public java.lang.String com.nextera.boot4.controller.VersionController.getVersion1()
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lambda$detectHandlerMethods$0(AbstractHandlerMethodMapping.java:283) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.core.MethodIntrospector.lambda$selectMethods$0(MethodIntrospector.java:76) ~[spring-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:366) ~[spring-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.core.MethodIntrospector.selectMethods(MethodIntrospector.java:74) ~[spring-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:276) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.processCandidateBean(AbstractHandlerMethodMapping.java:261) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:220) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:208) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:176) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1860) ~[spring-beans-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1809) ~[spring-beans-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    ... 21 common frames omitted
Caused by: java.lang.IllegalStateException: API version specified, but no ApiVersionStrategy configured
    at org.springframework.util.Assert.state(Assert.java:80) ~[spring-core-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.mvc.method.RequestMappingInfo$DefaultBuilder.build(RequestMappingInfo.java:773) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.createRequestMappingInfo(RequestMappingHandlerMapping.java:375) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.createRequestMappingInfo(RequestMappingHandlerMapping.java:279) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getMappingForMethod(RequestMappingHandlerMapping.java:229) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getMappingForMethod(RequestMappingHandlerMapping.java:79) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lambda$detectHandlerMethods$0(AbstractHandlerMethodMapping.java:279) ~[spring-webmvc-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
    ... 31 common frames omitted

3、解决方法:

@Configuration
public class VersionConfig implements WebMvcConfigurer {

    @Override
    public void configureApiVersioning(ApiVersionConfigurer configurer) {
        configurer.useRequestParam("version");

        configurer.useRequestHeader("version");

        configurer.useRequestHeader("X-Version");

        //Add resolver to extract the version from a path segment.
        //Params:
        //index – the index of the path segment to check;
        // e.g. for URL's like "/{version}/..." use index 0, for "/api/{version}/..." index 1.
        configurer.usePathSegment(1);
    }
}

4、配置好后, 支持一下形式访问不同api版本信息:

资源下载链接为: https://pan.quark.cn/s/9648a1f24758 在Java项目开发中,IntelliJ IDEA为Maven项目引入本地jar包提供了便捷方法。以下是详细步骤: 启动IDEA,进入目标Maven项目。若右侧工具栏未显示Maven面板,可通过View -> Tool Windows -> Maven将其打开。 在Maven面板里,找到带有小箭头的命令行输入框,点击箭头图标,弹出用于输入Maven命令的窗口。 在该窗口输入特定的Maven命令,用以将本地jar包安装至本地Maven仓库。命令格式如下: 例如,若test.jar位于F:\目录,想将其作为test组ID下的test模块,版本0.0.1,jar格式,命令则为: 输入完毕后,点击运行。若无意外,Maven将执行命令,把jar包安装到本地仓库,并显示“BUILD SUCCESS”,表明操作成功。 接下来,在项目的pom.xml文件中添加新依赖,以便IDEA知晓编译和运行时需用到该jar包。添加如下代码: 保存pom.xml文件后,IDEA会自动检测到变动并更新项目配置。至此,Maven项目已能使用刚导入的本地jar包。 总的来说,通过上述流程,我们实现了在IDEA Maven项目中导入本地jar包。这适用于开发中所需的自定义库以及未通过公共Maven仓库发布的第三方组件。务必正确配置groupId、artifactId和version,以维持项目整洁和可维护性。当项目结构或依赖有变动时,要及时更新pom.xml,确保项目正常运行。希望这个教程对你在IDEA中管理Maven项目有所帮助,若有更多相关问题,可继续查阅文档和资源。
### 解决方案 此错误通常发生在尝试运行基于 Qt 的应用程序时,尤其是在 Linux 或其他类 Unix 系统上。以下是可能导致该问题的原因以及解决方案: #### 1. **缺少必要的库** 如果系统中未安装 `libxcb` 及其相关组件,则可能会导致此类错误。可以通过以下命令来安装所需的依赖项[^1]。 ```bash sudo apt-get update sudo apt-get install -y libxcb-util1 libxcb-image0 libxcb-shm0 libxcb-randr0 libxcb-render-util0 libxcb-keysyms1 libxcb-xfixes0 libxcb-shape0 libxcb-sync1 libxcb-xinerama0 libxcb-cursor0 ``` 这些包提供了支持 XCB 插件所需的核心功能。 --- #### 2. **环境变量配置不正确** 当执行 `.py` 文件时,如果没有设置正确的 DISPLAY 环境变量或者权限不足,也可能引发类似的错误消息 `'could not connect to display'` 和 `'Authorization required, but no authorization protocol specified'`。 可以按照如下方法检查并修正环境变量: - 验证当前用户的 DISPLAY 是否已正确定义: ```bash echo $DISPLAY ``` 如果返回为空或不符合预期(通常是类似 `:0`),则需要手动指定它: ```bash export DISPLAY=:0 ``` - 对于远程访问场景下可能出现的身份验证失败情况,可临时禁用身份验证需求测试连通性(仅限调试用途): ```bash xhost + ``` 注意这会降低安全性,在生产环境中应谨慎操作,并考虑更安全的方式如通过 SSH 使用 `-X` 参数转发图形界面。 --- #### 3. **Qt 平台插件路径异常** 有时即使存在相应的共享对象文件(.so),由于某些原因它们无法被加载成功。此时应该确认实际使用的 Python 版本及其关联的 PyQt/PySide 安装位置下的 plugins 子目录里确实有名为 qxcb.so 的动态链接库可用。 可通过打印 sys.path 来查看解释器搜索模块的具体顺序列表;另外也可以直接定位到站点包中的相应子文件夹核查是否存在目标文件: ```python import os from pathlib import Path qt_plugin_dir = Path(__file__).parent / "site-packages" / "PyQt5" / "Qt" / "plugins" print(os.listdir(qt_plugin_dir)) ``` 假如发现缺失对应条目的话,重新构建整个框架可能是唯一可行的办法之一。 --- #### 4. **授权协议问题** 对于部分特定情况下提到的 `"Authorization required"` 错误提示,除了调整主机策略允许外部接入外,还需确保客户端具备合法票据参与协商过程。一种简单粗暴但有效的方法是在启动脚本前加入下面这条指令: ```bash unset SESSION_MANAGER ``` 这样做的目的是阻止程序试图联系不存在的服务端实例从而触发额外校验逻辑链路。 --- 综上所述,针对所描述的现象采取综合措施逐一排查直至恢复正常运作状态即可解决问题。 ```python # 示例代码片段用于检测环境是否正常工作 import sys from PyQt5.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel('Hello World!') label.show() sys.exit(app.exec_()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值