You need to enable JavaScript to run this app. 如何将Spring API制作为可通过互联网访问的公共Web服务?
优惠活动
大模型
产品
解决方案
定价
更多

如何将Spring API制作为可通过互联网访问的公共Web服务?

实现公开可访问的Spring WebService 完整方案

一、基础依赖引入

首先在pom.xml(Maven)或build.gradle(Gradle)里引入对应依赖,以Maven为例:
如果需要实现SOAP协议的传统WebService:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
    <groupId>wsdl4j</groupId>
    <artifactId>wsdl4j</artifactId>
</dependency>

如果需要实现更通用的REST风格WebService:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

二、核心代码实现与注解说明

SOAP协议WebService实现

  • 第一步编写配置类,开启WebService相关能力:
@Configuration
@EnableWs // 开启Spring WebService原生支持
public class WebServiceConfig extends WsConfigurerAdapter {
    // 注册请求调度Servlet,处理所有WebService请求
    @Bean
    public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true); // 自动适配部署后的真实公网地址到WSDL文件中
        return new ServletRegistrationBean<>(servlet, "/ws/*"); // 所有/ws路径下的请求都走WebService调度逻辑
    }

    // 对外暴露WSDL文件,外部可通过 /ws/xxx.wsdl 路径直接获取
    @Bean(name = "publicService")
    public DefaultWsdl11Definition publicServiceWsdl(XsdSchema publicSchema) {
        DefaultWsdl11Definition wsdl = new DefaultWsdl11Definition();
        wsdl.setPortTypeName("PublicServicePort");
        wsdl.setLocationUri("/ws");
        wsdl.setTargetNamespace("http://你定义的命名空间地址");
        wsdl.setSchema(publicSchema);
        return wsdl;
    }

    @Bean
    public XsdSchema publicSchema() {
        // 加载你提前定义好的、描述请求响应结构的XSD文件
        return new SimpleXsdSchema(new ClassPathResource("public_service.xsd"));
    }
}
  • 第二步编写业务处理端点:
@Endpoint // 标记当前类为WebService请求处理端点
public class PublicServiceEndpoint {
    private static final String NAMESPACE_URI = "http://你定义的命名空间地址";

    // 匹配指定命名空间下的请求节点
    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "getDataRequest")
    @ResponsePayload // 标记方法返回值为响应报文的正文内容
    public GetDataResponse handleRequest(@RequestPayload GetDataRequest request) { // @RequestPayload 标记入参为请求报文的正文内容
        GetDataResponse response = new GetDataResponse();
        // 编写你的业务逻辑
        return response;
    }
}

REST风格WebService实现

  • 直接编写接口Controller即可:
@RestController // 标记当前类为REST接口处理类,所有方法返回值自动序列化为JSON/XML格式
@RequestMapping("/api/public") // 统一公共接口的访问前缀
@CrossOrigin(origins = "*") // 允许所有来源跨域访问,生产环境可按需限制可信来源
public class PublicApiController {

    @GetMapping("/info/{id}") // 处理GET类型请求,匹配路径/api/public/info/xxx
    public Info getInfo(@PathVariable Long id) {
        // 业务逻辑
        return new Info();
    }

    @PostMapping("/submit") // 处理POST类型请求
    public String submitData(@RequestBody DataDTO data) {
        // 业务逻辑
        return "操作成功";
    }
}

三、互联网访问配置

要让服务可被公网访问,需要完成以下配置:

  • 把服务部署到有公网IP的云服务器,或者用内网穿透工具将本地服务端口映射到公网
  • 开放服务器安全组、防火墙的服务端口,Spring Boot默认端口为8080,可在application.yml中修改:
server:
  port: 80
  • 有域名的场景下可将域名解析到公网IP,配置Nginx反向代理到Spring服务,同时可配置SSL证书开启HTTPS访问
  • 公开服务建议额外增加API密钥、签名校验等鉴权逻辑,避免被恶意调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 23:54:06