跳转到内容

构建第一个 Feat Cloud 应用

这篇指南带你创建一个最小的 Feat Cloud 应用。写完之后,你会得到一个通过 @Controller@RequestMapping 暴露出来的 HTTP 接口。

如果你还没有决定是否使用赞助能力,建议先从 Feat Core 快速入门 开始。

你将构建一个最小的注解式 Web 应用:

  • 访问 http://localhost:8080/hello
  • 返回一段纯文本 hello Feat Cloud
  • 启动时在控制台看到路由映射已经注册成功
  • 已获得 Feat Cloud 授权
  • JDK 8 或更高版本
  • Maven 3.0 或更高版本
  • 一个熟悉的 Java IDE

新建一个 Maven 项目,在 pom.xml 中加入:

pom.xml
<dependency>
<groupId>tech.smartboot.feat</groupId>
<artifactId>feat-cloud-starter</artifactId>
<version>${feat.version}</version>
</dependency>

创建 Bootstrap.java

Bootstrap.java
import tech.smartboot.feat.cloud.FeatCloud;
import tech.smartboot.feat.cloud.annotation.Controller;
import tech.smartboot.feat.cloud.annotation.RequestMapping;
@Controller
public class Bootstrap {
@RequestMapping("/hello")
public String helloWorld() {
return "hello Feat Cloud";
}
public static void main(String[] args) {
FeatCloud.cloudServer().listen();
}
}

这个例子里最关键的三部分分别是:

  • @Controller:声明这是一个控制器
  • @RequestMapping("/hello"):声明访问路径
  • FeatCloud.cloudServer().listen():启动 Feat Cloud 服务

运行 Bootstrap.main()。如果控制台里出现了类似下面的内容,就说明注解扫描和路由注册都成功了:

Feat Router:
|-> /hello ==> Bootstrap@helloWorld
http://0.0.0.0:8080/

看到 /hello ==> Bootstrap@helloWorld 这一行,基本就可以确认当前控制器已经被框架正确识别了。

访问 http://localhost:8080/hello

Feat Cloud 浏览器访问效果图

如果你看到了这段响应,说明下面几件事都已经成立:

  • 依赖已经正确引入
  • 控制器已经被扫描到
  • @RequestMapping 已经生效
  • 服务端和访问链路都是通的

在 Feat Cloud 里,最常见的问题不是代码本身,而是注解处理或 IDE 编译行为。

如果你修改控制器后发现路由没有更新,可以优先检查 IDEA 设置:

  1. 打开 Preferences
  2. 进入 Build, Execution, Deployment -> Build Tools -> Maven -> Runner
  3. 勾选 Delegate IDE build/run actions to Maven
IDEA 配置截图

这一步之后,最自然的阅读顺序通常是:

启动成功了,但访问 /hello 返回 404

Section titled “启动成功了,但访问 /hello 返回 404”

优先检查:

  1. 控制器是否真的加了 @Controller
  2. 方法是否真的加了 @RequestMapping("/hello")
  3. 修改后是否重新触发了编译和注解处理

控制器类不在启动类同一个包下

Section titled “控制器类不在启动类同一个包下”

这种情况下通常要显式设置扫描范围,见 CloudOptions 配置指南 里的 setPackages(...)

我只是想理解 Feat 的底层 HTTP 编程方式

Section titled “我只是想理解 Feat 的底层 HTTP 编程方式”

那就先去看 Feat Core 快速入门
Feat Cloud 不是 Feat 的唯一入口,而是更高一层的开发模型。