当你只想“把接口跑起来”,却被复杂的脚手架、无尽的配置和笨重的依赖拖住脚步,那种挫败感很真实。JustSimple 不是来替代一切的“王炸框架”,它只做一件事:让 Java Web API 开发简单到离谱,帮你把时间花在真正重要的业务上。

产品简介与定位

JustSimple 是一个“非常非常简单”的 Java Web API 开发库,强调零门槛、极简配置和极速启动,特别适合本地测试、简单接口、快速原型、极限编程、临时模型等场景。你可以在一分钟之内把一个 API 跑起来,天然适配跨语言转码、脚本生成接口等快速落地需求。 版本与包体持续演进,当前核心模块 justsimple-core 可直接通过 Maven 引入使用1。

为什么是 JustSimple(而不是再多一层复杂)

  • 轻量级: 无复杂上下文、无臃肿依赖,Java Web API 直接起飞,适合快速研发与小体量服务。

  • 零学习曲线: 注解驱动的 Controller/Handler,直觉式的 Context 请求上下文。

  • 一分钟上手: 几行代码、一句启动,让 Demo、原型、Webhook、回调接口即时可测。

  • 跨语言友好: 脚本/其他语言生成 Java 代码后立刻可用,避免“框架绑架”。

  • 可插拔配置: 通过实例池/启动参数注入 CORS、端口等配置;代码配置优先级更高,所见即所得。

  • 实用生态: 支持 CORS、Form/JSON 解析、原始 FullHttpRequest 访问;适配多种简易服务场景。

一分钟上手(依赖、启动、路由)

引入依赖(Maven)

xml

<dependencies>
    <dependency>
        <groupId>org.mutantcat.justsimple</groupId>
        <artifactId>justsimple-core</artifactId>
        <version>1.0.20250408</version>
    </dependency>
</dependencies>

以上为官方推荐的核心依赖版本,直接可用。

启动类(一句话启动)

java

import org.mutantcat.justsimple.Application;
import org.mutantcat.justsimple.annotation.JustSimple;

@JustSimple // 可指定 packageName 为基础包包名
public class Main {
    public static void main(String[] args) {
        // 一句话启动
        Application.start(Main.class, args);
    }
}
控制器与路由(GET/POST/表单/原始请求)

java

import org.mutantcat.justsimple.annotation.Controller;
import org.mutantcat.justsimple.annotation.Handler;
import org.mutantcat.justsimple.request.Context;

@Controller
public class MyController {
    @Handler(path = "/hello")
    public String hello(Context ctx) {
        // 获得 GET 请求的 params 参数
        List<String> name = ctx.getParam("name");
        // 获得 POST 请求携带的 JSON
        String json = ctx.getJson();
        // 获得 POST 请求携带的表单
        Map<String, Object> formData = ctx.getFormData();
        // 直接访问原始 FullHttpRequest
        FullHttpRequest fullHttpRequest = ctx.getFullHttpRequest();
        return "Hello, JustSimple!";
    }
}

实例与配置(Instance 池、CORS、端口)

定义与使用实例(注解即注册)

java

import org.mutantcat.justsimple.annotation.Instance;

@Instance
public class MyInstance {
    public String hello() {
        return "Hello, JustSimple!";
    }
}
手动存取实例

java

InstanceHandler.putInstance("MyInstance", this);
InstanceHandler.getInstance("MyInstance");
直接添加配置(启动前合并到 args)

java

import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.cors.CorsConfig;
import io.netty.handler.codec.http.cors.CorsConfigBuilder;
import org.mutantcat.justsimple.instance.InstanceHandler;

public class ConfigHandler {
    // 启动前调用:args = ConfigHandler.doConfig(args);
    public static String[] doConfig(String[] args) {
        CorsConfig corsConfig = CorsConfigBuilder.forAnyOrigin()
                .allowNullOrigin()
                .allowedRequestMethods(HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE)
                .allowedRequestHeaders("*")
                .exposeHeaders("X-Custom-Header")
                .maxAge(3600)
                .build();
        InstanceHandler.putInstance("CorsConfigInstanceName", corsConfig);

        Integer port = 8082;
        InstanceHandler.putInstance("portConfigName", port);

        String[] newParams = {"corsConfig:CorsConfigInstanceName","port:portConfigName"};

        String[] updatedArgs = new String[args.length + newParams.length];
        System.arraycopy(args, 0, updatedArgs, 0, args.length);
        System.arraycopy(newParams, 0, updatedArgs, args.length, newParams.length);
        return updatedArgs;
    }
}
通过实例添加配置(构造时即入池)

java

import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.cors.CorsConfigBuilder;
import org.mutantcat.justsimple.annotation.Instance;
import org.mutantcat.justsimple.instance.InstanceHandler;

@Instance
public class CorsConfig {
    public CorsConfig() {
        InstanceHandler.putInstance("CorsConfigInstanceName",
            CorsConfigBuilder.forAnyOrigin()
                .allowNullOrigin()
                .allowedRequestMethods(HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE)
                .allowedRequestHeaders("*")
                .exposeHeaders("X-Custom-Header")
                .maxAge(3600)
                .build()
        );
    }
}

规则与最佳实践

  • 包结构: Controller 类需放在 controller 包下,保持统一扫描规范。

  • 配置格式: 使用“配置名:实例名”,如 corsConfig:CorsConfigInstanceName、port:portConfigName。

  • 优先级: 代码配置 > 配置文件;自动注册的 @Instance > 启动语句前传入的配置。

  • 配置文件: resources/application.yaml 为默认配置文件路径。

  • 单例控制器: 需要单例时,可同时标注 @Instance 与 @Controller。

  • @Instance 说明: 注解类会自动在实例池中注册一个实例,可用 name 指定注册名(默认类路径)。

以上规范均来自官方说明与示例,便于快速对齐项目结构与启动约定。

典型落地场景

  • 本地测试/简单接口: 快速暴露一个 Java Web API,联调更顺手。

  • 快速原型/极限编程: 需求一变就能秒级调整,避免“重型框架启动成本”。

  • Webhook/回调服务: 轻装上阵,响应快,维护成本低。

  • AI/数据中间层: 作为模型调用、向量存取、函数工具接口的轻量网关。

  • IoT/边缘接口: 少量接口、强时效的网关场景,JustSimple 足够好用。

  • 跨语言转码: 由脚本/其他语言生成 Java 代码后直接运行,减少框架知识负担。

获取与社区

  • 官网:https://www.mutantcat.org/software/justsimple

  • GitHub:https://github.com/Mutantcat-Working-Group/JustSimple

  • 示例仓库:https://github.com/tyza66/JustSimpleDemo

如果你正被“想要一个简单 API,却不得不搬起大山”的无力感困住,JustSimple 也许正是你要的那把轻便扳手。现在就拉一条分支、粘贴上面的代码,把第一个接口跑起来。

关键词

  • 核心: Java Web API、Java API 框架、轻量级 Java 框架、JustSimple、Mutantcat、快速原型、极限编程、本地测试、简单接口、临时模型

  • 功能: 注解驱动、Controller、Handler、Context、Instance、InstanceHandler、实例池、CORS、跨域、CorsConfig、端口配置、application.yaml

  • 生态与场景: Webhook、回调接口、AI 中间层、数据网关、IoT、边缘计算、微服务接口、脚本转码、快速开发、零学习曲线

  • 技术词: FullHttpRequest、JSON 解析、Form 表单、Netty CORS、启动参数、包扫描、单例控制器、包结构规范、代码配置优先级

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐