You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Spring Framework 6中配置OpenAPI (Swagger) UI 3

Spring Framework 6 + 嵌入式Jetty 配置OpenAPI 3 UI 实操指南

一、核心依赖配置

在pom.xml中添加适配Spring Framework 6的对应依赖:

<dependencies>
    <!-- Spring Framework 核心 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>6.1.0</version>
    </dependency>
    <!-- OpenAPI 3 核心 -->
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-core</artifactId>
        <version>2.2.0</version>
    </dependency>
    <!-- Swagger UI 依赖 -->
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>2.2.0</version>
    </dependency>
    <!-- 嵌入式Jetty -->
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>11.0.15</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>11.0.15</version>
    </dependency>
</dependencies>

二、OpenAPI 配置类

创建配置类注册OpenAPI实例,并配置静态资源映射(解决Swagger UI页面加载失败问题):

package com.example.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class OpenApiConfig implements WebMvcConfigurer {

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("示例API文档")
                        .version("1.0")
                        .description("基于Spring Framework 6的API说明"));
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 映射Swagger UI的静态资源
        registry.addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/");
        registry.addResourceHandler("/v3/api-docs/**")
                .addResourceLocations("classpath:/META-INF/springdoc/");
    }
}

三、嵌入式Jetty 启动配置

必须配置Jetty加载静态资源的DefaultServlet,否则Swagger UI的HTML、JS文件无法被访问:

package com.example.config;

import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class JettyServerConfig {

    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);

        // 创建Spring上下文
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.scan("com.example");

        // 配置Jetty Servlet上下文
        ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS);
        handler.setContextPath("/");
        handler.addEventListener(new ContextLoaderListener(context));

        // 注册DispatcherServlet
        ServletHolder dispatcherServletHolder = new ServletHolder(new DispatcherServlet(context));
        dispatcherServletHolder.setInitOrder(1);
        handler.addServlet(dispatcherServletHolder, "/*");

        // 注册DefaultServlet处理静态资源(关键!)
        ServletHolder defaultServletHolder = new ServletHolder("default", org.eclipse.jetty.servlet.DefaultServlet.class);
        defaultServletHolder.setInitParameter("dirAllowed", "false");
        handler.addServlet(defaultServletHolder, "/");

        server.setHandler(handler);
        server.start();
        server.join();
    }
}

四、可参考的资源方向

GitHub仓库示例

找专注于Spring Framework原生(非Boot)+ 嵌入式Jetty + OpenAPI 3的仓库,核心看这几点:

  • 依赖版本是否适配Spring 6
  • 静态资源映射的配置细节
  • Jetty上下文的Servlet注册逻辑

文章/视频内容

  • 技术博客:重点看讲解“Spring非Boot项目配置Swagger UI”“嵌入式Jetty静态资源处理”的内容,核心解决静态资源无法加载的问题
  • 视频教程:搜索“Spring Framework 6 原生项目集成OpenAPI”,关注容器配置和资源映射的实操步骤

内容的提问来源于stack exchange,提问作者Overdrowsed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:23:13