CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Java 生态与工具链/课时/Javalin 微框架
RawBlame
课时目录12 节

Java 生态与工具链

  1. 01Java 生态地图
  2. 02数据库访问
  3. 03Hibernate 深入
  4. 04EBean ORM
  5. 05日志框架
  6. 06Javadoc 与文档
  7. 07Play Framework
  8. 08Javalin 微框架
  9. 09REST Assured
  10. 10JMeter 性能测试
  11. 11Java 加密基础
  12. 12综合练习

Javalin 微框架

javalin;轻量 HTTP API。

25 分钟

Javalin 微框架

不是每个服务都需要 Spring 全家桶。Javalin 几行代码就能起一个 HTTP API——基于 Jetty,API 像 Express.js,适合工具服务、Webhook 与教学 demo。本课衔接 java-core-essentials 的 Lambda,为 spring-boot-essentials 提供「裸 HTTP 之上缺了什么」的对照。

学习目标

  • 用 Javalin 搭建 REST 端点并解析 JSON 请求体
  • 配置中间件(before/after)做日志与异常统一处理
  • 判断何时用 Javalin 替代 Spring Boot

最小 API 服务

import io.javalin.Javalin;
import io.javalin.http.Context;

public class Main {
    public static void main(String[] args) {
        var books = new InMemoryBookStore();

        Javalin app = Javalin.create(config -> {
            config.showJavalinBanner = false;
        }).start(7000);

        app.get("/api/books/{isbn}", ctx -> {
            String isbn = ctx.pathParam("isbn");
            books.find(isbn)
                .ifPresentOrElse(
                    b -> ctx.json(b),
                    () -> ctx.status(404).result("not found"));
        });

        app.post("/api/books", ctx -> {
            Book body = ctx.bodyAsClass(Book.class);
            books.save(body);
            ctx.status(201).json(body);
        });
    }
}

无需注解扫描、无 IoC 容器——依赖你自己 new 或传入。

中间件与异常处理

app.before(ctx -> log.info("{} {}", ctx.method(), ctx.path()));

app.exception(IllegalArgumentException.class, (ex, ctx) -> {
    ctx.status(400).json(Map.of("error", ex.getMessage()));
});

app.exception(Exception.class, (ex, ctx) -> {
    log.error("unhandled", ex);
    ctx.status(500).json(Map.of("error", "internal error"));
});

对比 Spring 的 @ControllerAdvice:Javalin 在启动链上注册,更显式、更少魔法。

何时选 Javalin

场景JavalinSpring Boot
单文件 CLI 附带 HTTP 管理口✅ 极佳过重
需要 JPA、Security、Actuator❌ 需自己拼✅
团队已有 Spring 规范学习用生产用
冷启动 < 1s 的 FaaS/边缘✅ jar 小启动慢

可与 jev-db 的 UserRepository 组合:几十行起一个用户查询 API,无需 spring-boot-starter-web。

Maven 依赖

<dependency>
  <groupId>io.javalin</groupId>
  <artifactId>javalin</artifactId>
  <version>6.3.0</version>
</dependency>

打包 java -jar 或 mvn exec:java 即可运行。

练习

  • 为 jev-db 的 UserRepository 写 Javalin 的 GET /users/{id} 与 404 处理
  • 加 before 中间件打印请求耗时(after 里计算)
  • 用 curl 或 REST Client 验证 POST JSON 与错误 400

小结

Javalin 证明 Java 也能「几行起服务」;缺的是 Spring 的企业级装配。 下一课用 REST Assured 为这些 API 写可读测试。

加载本节练习…
← 上一课Play Framework下一课 →REST Assured