SpringBoot2.x集成 Swagger2 报错 404

本文详细介绍了如何解决在SpringBoot2.x版本中遇到的Swagger404错误,通过添加配置类、调整启动类设置及正确集成WebMvcConfigurer,确保Swagger文档能够正常访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swagger 404 错误

Swagger 404 错误产生原因:
SpringBoot2.x 版本以后的配置加载问题引起,具体可以去看源码,或者转参考去看,针对这个问题解决办法如下:

1.添加配置类(和@SpringBootApplication注解类在同一级目录)

package com.admin.monitor;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Swagger2 配置文件
 * @author 三多
 * @Time 2019/3/18
 */
@EnableSwagger2
@Configuration
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.admin.monitor.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("大数据-监控系统")
                .description("关注:xxxx")
                .termsOfServiceUrl("http://localhost:8201")
                .contact("sanduo")
                .version("v1.0")
                .build();
    }

}

其中有一下几点需要注意:

  1. 添加注解开启Swagger扫描 ,@EnableSwagger2;
  2. 将配置交由Spring ,@Configuration;

2.在添加配置类-解决404 资源加载不到问题

package com.admin.monitor.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;

/**
 * 解决前台返回Long类型精度损失的问题
 * @author 三多
 * @Time 2019/3/25
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    /**
     * 解决前端解析Long丢精度的问题
     * @param converters
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        /**
         * 序列换成json时,将所有的long变成string
         * 因为js中得数字类型不能包含所有的java long值
         */
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        jackson2HttpMessageConverter.setObjectMapper(objectMapper);
        converters.add(jackson2HttpMessageConverter);
    }


    /**
     * 解决 swagger-ui404问题
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }

}

其中有一下几点需要注意:

  1. 将配置交由Spring ,@Configuration;
  2. **注意不是集成WebMvcConfigurationSupport,而是实现WebMvcConfigurer **

3.启动类不要添加@EnableWebMvc

//@EnableWebMvc
@SpringBootApplication
public class AdminServerApp {
    public static void main(String[] args) {
        SpringApplication.run(AdminServerApp.class,args);
    }
}

原因:

  1. @EnableWebMvc:底层使用了WebMvcConfigurationSupport,而替换WebMvcConfigurationSupport致使自动配置失效

4.完美启动

访问:http://localhost:8201/swagger-ui.html
swagger 启动也

5.参考

1.SpringBoot2.x中WebMvcConfigurerAdapter已过时,使用WebMvcConfigurationSupport替换时自动配置失效

<think>好的,我现在需要分析用户的问题,关于Spring Boot 3.x相对于2.x的优化和升级。首先,用户之前询问了Java的安全性,现在转向Spring Boot的版本差异,可能是在实际开发中需要升级项目,或者学习新版本特性。用户可能是开发人员,有一定的Spring Boot使用经验,希望了解升级带来的变化,以便评估是否值得升级,或者避免潜在的兼容性问题。 接下来,我需要回忆Spring Boot 3.x的主要更新点。首先,Spring Boot 3.x基于Spring Framework 6,而Spring Framework 6需要Java 17及以上,这是一个重要的升级点。Java 17的新特性如密封类、模式匹配等可能被Spring Boot 3.x利用,同时版本升级可能带来性能优化。 然后,Jakarta EE的迁移,从javax到jakarta命名空间,这会影响很多依赖,比如Servlet API、JPA等。用户升级时需要注意修改import语句,以及依赖库是否兼容Jakarta EE 9或10。例如,原来的javax.servlet需要改为jakarta.servlet,这可能涉及到代码中的多处修改,以及第三方库的升级。 另外,GraalVM原生镜像的支持增强,Spring Boot 3.x对Spring Native的集成,使得构建原生应用更加方便。这对于需要快速启动和低内存占用的云原生应用来说是一个重要的优化点,用户如果关注云部署,这点会很关键。 还有配置属性的变化,可能有些旧的配置项被废弃,新的配置项引入。比如,Spring Boot 2.x中的某些配置在3.x中可能不再适用,需要查阅官方文档进行迁移。此外,自动配置的改进可能带来更智能的默认配置,减少开发者的手动配置工作。 在依赖管理方面,Spring Boot 3.x会更新其starter依赖的版本,比如Spring Data、Spring Security等,这些子项目的版本升级可能带来新功能或API变化。用户需要注意这些依赖的兼容性,特别是如果项目中使用了特定版本的库,可能需要调整版本号。 还有响应式编程的增强,如果用户的项目使用了WebFlux,Spring Boot 3.x可能提供了更好的支持或性能优化。另外,Actuator端点的改进,监控和管理功能的增强也是可能的升级点。 另外,安全方面的改进,比如默认的SSL配置更严格,或者集成了新的安全特性,这也是需要考虑的。比如,OAuth2的支持是否有变化,或者Spring Security的集成方式是否有调整。 测试方面,可能引入了新的测试工具或改进了现有的测试支持,比如对JUnit 5的进一步整合,或者Mockito版本的升级,影响单元测试的编写方式。 文档和社区支持方面,用户升级时需要参考Spring Boot 3.x的官方迁移指南,了解破坏性变更和推荐的升级步骤。同时,社区可能已经有一些常见问题的解决方案,用户遇到问题可以更快找到帮助。 最后,需要总结这些变化带来的好处和挑战,比如更好的性能、新功能支持,但也要面对代码修改和依赖升级的成本。用户需要权衡这些因素,决定是否进行升级,或者如何规划升级路径。</think>以下是 Spring Boot 3.x 相较于 2.x 的核心升级与优化,按技术维度分类说明: --- ### **一、基础框架升级** | **特性** | **Spring Boot 2.x** | **Spring Boot 3.x** | **影响范围** | |-----------------------|------------------------------------|---------------------------------------|-------------------------------| | **Java 版本** | 最低 Java 8 | **强制要求 Java 17+** | 需升级 JDK | | **Spring Framework** | 5.x 系列 | **6.x 系列** | 全面支持 JDK 17 特性 | | **Jakarta EE** | 基于 Java EE (javax.*) | **全面迁移至 Jakarta EE 9+ (jakarta.*)** | 所有 javax 包名需替换 | ```java // ❌ 旧版代码(2.x) import javax.servlet.http.HttpServletRequest; // ✅ 新版代码(3.x) import jakarta.servlet.http.HttpServletRequest; ``` --- ### **二、核心技术增强** #### **1. GraalVM 原生镜像支持** - 深度集成 **Spring Native**,无需额外依赖 - 编译为原生可执行文件(启动时间 < 100ms) ```bash # 构建命令升级 ./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=demo ``` #### **2. 响应式编程强化** - **Project Reactor 2022.0+** 默认支持 - 新增 `RSocketClientAutoConfiguration` 自动配置 #### **3. HTTP 客户端升级** | 客户端类型 | 2.x 默认实现 | 3.x 默认实现 | |------------------|--------------------|----------------------| | **RestTemplate** | Apache HttpClient | **JDK HttpClient** | | **WebClient** | Reactor Netty | **保持但性能优化** | --- ### **三、配置与功能的重大变更** #### **1. 属性配置迁移** ```properties # 2.x 配置 server.servlet.context-path=/api # 3.x 新配置(更语义化) spring.application.name=myapp spring.mvc.servlet.path=/api ``` #### **2. 废弃功能移除** - 移除 **Springfox Swagger** 支持 → 改用 **SpringDoc OpenAPI** - 删除 **Jersey** 自动配置(需手动添加依赖) - 停用 **EhCache 2.x** → 强制升级至 **EhCache 3** #### **3. 安全升级** - **Spring Security 6.x** 默认集成 - OAuth2 资源服务器配置简化: ```java // 新版配置(3.x) @Bean SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults())); return http.build(); } ``` --- ### **四、监控与可观测性** | 模块 | 2.x 功能 | 3.x 增强点 | |--------------------|---------------------------------|------------------------------------| | **Actuator** | 基础健康检查/指标 | 新增 **Prometheus Exemplar** 支持 | | **Micrometer** | 1.10.x | **1.11+** 集成 OpenTelemetry | | **日志追踪** | 需手动配置 Sleuth | **原生支持 Trace ID 透传** | --- ### **五、依赖管理升级** | 依赖项 | 2.x 默认版本 | 3.x 默认版本 | |---------------------|-----------------|------------------| | **Hibernate** | 5.6.x | **6.2.x** | | **Tomcat** | 9.0.x | **10.1.x** | | **Jetty** | 10.x | **11.x** | | **JUnit Jupiter** | 5.8.x | **5.9.x** | --- ### **六、典型代码迁移示例** #### **1. 构造函数注入强制要求** ```java // 2.x 允许字段注入 @Autowired private UserService userService; // 3.x 推荐构造函数注入(Lombok 简化) @RequiredArgsConstructor @Service public class MyService { private final UserService userService; } ``` #### **2. 日期时间类型处理** ```java // 2.x 使用 java.util.Date @JsonFormat(pattern = "yyyy-MM-dd") private Date createTime; // 3.x 推荐 java.time.* @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime createTime; ``` --- ### **升级注意事项** 1. **兼容性检查工具** 使用 `spring-boot-properties-migrator` 自动检测废弃配置 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> </dependency> ``` 2. **分阶段升级建议** ``` 2.7.x → 3.0.x → 3.1.x(逐步处理破坏性变更) ``` 3. **常见问题** - 遇到 `NoSuchMethodError`:检查第三方库是否支持 Jakarta EE - 日志报错 `javax` 不存在:使用 IDE 全局替换为 `jakarta` --- Spring Boot 3.x 通过拥抱现代 Java 生态(JDK 17/Jakarta EE/GraalVM),为云原生和微服务场景提供了更强大的基础设施。升级过程需重点关注包名变更和依赖兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值