全书目录

第四十六篇:Micronaut 完全指南 —— 编译期轻装侦察营宇宙

第十二章:一个最小完整示例 —— 从哨站到档案库走一遍

1 分钟 126 字 第 860 / 962 个阅读单元

把它们串成一个最小完整服务:

java
package example;

import io.micronaut.http.annotation.*;
import io.micronaut.serde.annotation.Serdeable;
import jakarta.inject.Singleton;

@Controller("/missions")
public class MissionController {

    private final MissionService missionService;

    public MissionController(MissionService missionService) {
        this.missionService = missionService;
    }

    @Get("/{id}")
    public MissionView detail(Long id) {
        return missionService.detail(id);
    }

    @Post
    public MissionView create(@Body CreateMissionCommand command) {
        return missionService.create(command);
    }
}

@Singleton
class MissionService {

    public MissionView detail(Long id) {
        return new MissionView(id, "night-watch", "ready");
    }

    public MissionView create(CreateMissionCommand command) {
        return new MissionView(1L, command.name(), "created");
    }
}

@Serdeable
record CreateMissionCommand(String name) {
}

@Serdeable
record MissionView(Long id, String name, String status) {
}

这段代码里你能看到 Micronaut 的典型气质:

  • Controller 负责前线哨站
  • Service 负责营内调度
  • DTO 显式声明可序列化
  • 注解驱动但运行时尽量轻量

也就是:

不是没有注解,而是注解尽量在编译期消化。