Jboot 是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的微服务框架,帮助开发者降低微服务开发门槛。同时完美支持在 idea、eclipse 下多 maven 模块,对 java 代码、html、css、js 等资源文件进行热加载。爽爽开发,快乐生活。
到目前为止,Jboot 已经开源超过了 4 年的时间,迭代了 160+ 个版本,已经被超过 1000+ 公司在使用,其中包含了多个知名的上市公司。
Jboot V3.6.9 主要增强 Jboot 和前端 Json 的交互与渲染能力,体现在新增了 @JsonBody 注解用于接收前端的的 Json 数据和重构 ErrorRender ,在程序发生错误的时候能够给到前端友好的体验。
@JsonBody 的功能非常强大,比如,前端传入的 Json 内容如下:
[1,2,3]
如下的方法都可以正常接收数据:
public void method1(@JsonBody() int[] beans) { System.out.println("beans--->" + beans); renderText("ok"); } public void method2(@JsonBody() String[] beans) { S ystem.out.println("beans--->" + beans); r enderText("ok"); } public void method3(@JsonBody() List beans) { System.out.println("beans--->" + beans); renderText("ok"); } public void method4(@JsonBody() Set beans) { System.out.println("beans--->" + beans); renderText("ok"); } public void method5(@JsonBody() List<Integer> beans) { System.out.println("beans--->" + beans); renderText("ok"); } public void method6(@JsonBody() Set<Integer> beans) { System.out.println("beans--->" + beans); renderText("ok"); } public void method7(@JsonBody() List<String> beans) { System.out.println("beans--->" + beans); renderText("ok"); } public void method8(@JsonBody() Set<String> beans) { System.out.println("beans--->" + beans); renderText("ok"); }
如果前端传入的是如下的 Json 数据:
{ "aaa":{ "bbb":[1,2,3] } }
只需要在 @JsonBody 添加对应的前缀即可,比如:
public void method1(@JsonBody("aaa.bbb") int[] beans) { System.out.println("beans--->" + beans); renderText("ok"); }
对 Java Bean 的支持也是非常友好的,比如 MyBean 的代码如下:
public class MyBean { private String id; private int age; private BigInteger amount; //getter setter }
前端传入数据如下:
{ "aaa":{ "bbb":{ "id":"abc", "age":17, "amount":123 } } }
Controller 后端接收代码如下:
public void bean(@JsonBody("aaa.bbb") MyBean bean) { System.out.println("bean--->" + bean); renderText("ok"); }
或者,后端也可以直接使用一个 Map 来接收:
public void map(@JsonBody("aaa.bbb") Map map) { System.out.println("map--->" + map); renderText("ok"); }
使用 Map 接收也可以直接指定 Map 的数据类型:
public void map(@JsonBody("aaa.bbb") Map<String, String> map) { System.out.println("map--->" + map); renderText("ok"); }
或者,我们只接受单个值:
public void id(@JsonBody("aaa.bbb.id") String id) { System.out.println("id--->" + id); renderText("ok"); }
public void age1(@JsonBody("aaa.bbb.age") int age1) { System.out.println("age1--->" + age1); renderText("ok"); }
直接使用 String、BigInteger、Long、float 接受 int,自动会进行强转。
public void age2(@JsonBody("aaa.bbb.age) String age2) { System.out.println("age2--->" + age2); renderText("ok"); }
public void age3(@JsonBody("aaa.bbb.age) BinInteger age3) { System.out.println("age3--->" + age3); renderText("ok"); }
倘若前端传入的是 Bean 数组,例如:
{ "aaa":{ "bbb":[ { "id":"abc", "age":17, "amount":123 }, { "id":"abc", "age":17, "amount":123 } ] } }
后端可以通过如下的方式进行接收数据,例如:
public void list(@JsonBody("aaa.bbb") List<MyBean> list) { System.out.println("list--->" + list); renderText("ok"); }
或者
public void set(@JsonBody("aaa.bbb") Set<MyBean beans) { System.out.println("array--->" + beans); renderText("ok"); }
或者
public void array(@JsonBody("aaa.bbb") MyBean[] beans) { System.out.println("array--->" + beans); renderText("ok"); }
@JsonBody 还有更多的支持,篇幅有限不再一一举例。
Jboot 主要有以下特征:
1、基于 JFinal 的 MVC + ORM 快速开发
2、基于 ShardingSphere + Seata 分布式事务 和 分库分表
3、基于 Dubbo 或 Motan 的 RPC 实现
4、基于 Sentinel 的分布式限流和降级
5、基于 Apollo 和 Nacos 的分布式配置中心
6、基于 EhCache 和 Redis 的分布式二级缓存
Jboot v3.6.9 更新内容如下:
新增:AttachmentManager 新增保存文件的若干方法
新增:Controller 参数新增 @JsonBody 的支持
新增:Http 工具模块添加更多的配置,方便在 fatjar 模式下能配置 https 相关证书
新增:ErrorRender 自动判断前端是否需要 json 渲染,当请求头是 application/json 的时候自动渲染错误的 json
优化:JbootSimpleApplication,使之代码更加简洁
优化:优化缓存拦截器对方法的 key 进行构建,提高性能
优化:默认为 JbootAccessTokenCache 添加 2 个小时的缓存时间
优化:LocalAttachmentContainer,默认保存文件的时候,对文件进行相同文件验证
优化:JwtManager 对 Jwt 解析出错或没有 Jwt 数据时,返回常量 map
优化:升级 JFinal、Undertow、Jackson 等到最新版本
开发文档:
https://jbootprojects.gitee.io/docs/
同时,Jboot 官方也推出了企业级开发框架 JbootAdmin,详情 https://jbootprojects.gitee.io/docs/jbootadmin/
maven 依赖:
<dependency> <groupId>io.jboot</groupId> <artifactId>jboot</artifactId> <version>3.6.9</version> </dependency>
Hello World:
@RequestMapping("/") public class HelloworldController extends JbootController { public void index(){ renderText("hello world"); } public static void main(String[] args){ JbootApplication.run(args); } }