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

Spring Boot集成Swagger后控制台打印地址、启动自动打开页面问题咨询

针对你的两个问题的解决方案如下

问题1:应用启动时控制台打印Swagger UI访问地址

你可以通过监听Spring Boot的ApplicationReadyEvent事件,在应用完全启动后读取服务配置,拼接Swagger地址后打印到控制台。Springfox 3.0.0版本的默认Swagger UI路径为/swagger-ui/index.html,实现代码如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.net.InetAddress;
import java.net.UnknownHostException;

@Component
public class SwaggerPrintConfig implements ApplicationListener<ApplicationReadyEvent> {
    private static final Logger log = LoggerFactory.getLogger(SwaggerPrintConfig.class);

    @Value("${server.port:8080}")
    private int port;

    @Value("${server.servlet.context-path:}")
    private String contextPath;

    @Value("${server.address:127.0.0.1}")
    private String address;

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        try {
            String hostAddress = "0.0.0.0".equals(address) ? InetAddress.getLocalHost().getHostAddress() : address;
            String swaggerUrl = String.format("http://%s:%s%s/swagger-ui/index.html", hostAddress, port, contextPath);
            log.info("Swagger UI 访问地址:{}", swaggerUrl);
        } catch (UnknownHostException e) {
            log.warn("获取本地IP失败,Swagger地址打印异常", e);
        }
    }
}

添加该类后启动应用,即可在控制台看到打印的完整Swagger访问地址。


问题2:本地启动时自动打开Swagger访问地址

你可以在上述监听逻辑中新增自动打开浏览器的逻辑,建议配合多环境配置使用,仅在本地开发环境触发,避免生产环境执行该逻辑。

实现步骤

  1. 首先在本地开发的配置文件(application.yml/application.properties)中指定激活开发环境配置:spring.profiles.active=dev
  2. 修改上述SwaggerPrintConfig类,新增自动打开逻辑:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import java.awt.*;
import java.net.InetAddress;
import java.net.URI;
import java.net.UnknownHostException;

@Component
@Profile("dev") // 仅dev环境生效,生产环境不会加载该类
public class SwaggerPrintConfig implements ApplicationListener<ApplicationReadyEvent> {
    private static final Logger log = LoggerFactory.getLogger(SwaggerPrintConfig.class);

    @Value("${server.port:8080}")
    private int port;

    @Value("${server.servlet.context-path:}")
    private String contextPath;

    @Value("${server.address:127.0.0.1}")
    private String address;

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        try {
            String hostAddress = "0.0.0.0".equals(address) ? InetAddress.getLocalHost().getHostAddress() : address;
            String swaggerUrl = String.format("http://%s:%s%s/swagger-ui/index.html", hostAddress, port, contextPath);
            log.info("Swagger UI 访问地址:{}", swaggerUrl);

            // 自动打开浏览器逻辑
            if (Desktop.isDesktopSupported()) {
                Desktop desktop = Desktop.getDesktop();
                desktop.browse(new URI(swaggerUrl));
            }
        } catch (Exception e) {
            log.warn("Swagger地址打印或自动打开失败", e);
        }
    }
}

注意事项

  • 无图形界面的Linux环境下Desktop类会自动不可用,代码会跳过打开逻辑不会抛出异常
  • 生产环境不要激活dev profile,避免触发不必要的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:06:03