Redkale 2.7.0 发布,Java 分布式微服务框架

Redkale 2.7.0 发布。

Redkale, 一个Java分布式微服务框架,1.6M的jar可以代替传统几十M的第三方。包含TCP/UDP、HTTP、RPC、依赖注入、序列化与反序列化、数据库操作、WebSocket等功能。  一方面模块高度整合,极大的简化业务开发代码,一方面暴露大量底层,方便二次框架开发。  

Java并不臃肿, 臃肿的是你自己的设计思维!

本次版本更新内容

  1、【新增】增加ConvertCoder功能,可以自定义字段的序列化
  2、【新增】增加JsonMultiDecoder、JsonMultiObjectDecoder、OneOrList功能
  3、【新增】JsonConvert全面兼容JSON5
  4、【新增】增加redkale命令行
  5、【新增】增加HttpRpcAuthenticator功能
  6、【新增】MessageAgent增加配置MessageCoder功能
  7、【新增】实现LoggingSearchHandler功能
  8、【新增】ConvertFactory增加mapFieldFunc、ignoreMapColumns功能
  9、【新增】增加PropertiesAgent功能
 10、【新增】增加链路ID Traces
 11、【新增】增加ResourceListener.different功能
 12、【新增】增加Environment类
 13、【新增】增加RestLocale功能
 14、【优化】优化PrepareServlet中HttpRender的初始化顺序
 15、【优化】日志支持java.util.logging.ConsoleHandler.denyreg配置
 16、【优化】FilterColumn支持least=0时空字符串也参与过滤
 17、【优化】HttpRequest兼容参数名为空字符串
 18、【优化】移除CryptColumn、CryptHandler功能
 19、【优化】PrepareServlet 更名为 DispatcherServlet
 20、【优化】@WebServlet合并url
 21、【修复】修复HttpResponse.finish结果status=404时按200输出的bug
 22、【修复】修复HttpMessageLocalClient创建request时没有赋值给currentUserid值
 23、【修复】修复Rest.createRestServlet带特定泛型问题
 24、【修复】修复Convert模块中父类含public field,subclass不传父类会导致NoSuchFieldError的bug
 25、【修复】修复ApiDocCommand在没有运行时不能生成doc的bug
 26、【修复】修复JsonWriter.writeWrapper按latin1编码写的bug
 27、【修复】修复JsonDynEncoder在定制字段情况下会被全量字段的动态类覆盖的bug

更新详情介绍

Json 序列化功能增强:

   1、支持JSON5

{
   intval1: 0xa,         //支持十六进制, 值转成10
   intval2: +100,        //支持+开头, 值转成100
   longval1: NaN,        //支持NaN, 值转成0
   longval2: Infinity,   //值转成Long.MAX_VALUE
   floatval1: NaN,       //支持NaN, 值转成Float.NaN
   doubleval: -Infinity, //值转成Double.NEGATIVE_INFINITY
   //这是一个单行注释
   name : "haha",
   /* 这是一个多行注释
      这是一个多行注释 */
   desc : "哈哈",
   ints: [1,2,3,4,]      //兼容对象尾部多一个','
}

   以上json字符串能正确反解析成Java对象。

   2、OneOrList 

     当一个对象字段可能是单个对象,也可能是对象集合时,可以设定字段类型为 OneOrList<T>

    public class JavaBean {
        
        public String name;
        
        public OneOrList<String> address;        
    }
    {"name":"redkale", "address": "wuhan"}

    {"name":"redkale", "address": ["wuhan","hubei","china"]}

    上面两个json字符串都可以正确解析成JavaBean对象,  也可以 直接用OneOrList的泛型来反序列化对象:

    JsonConvert convert = JsonConvert.root();
    Type type = new TypeToken<OneOrList<String>>() {}.getType();
    OneOrList<String> one = convert.convertFrom(type, "haha");
    OneOrList<String> list = convert.convertFrom(type, "['haha','hehe']");
    System.out.println(convert.convertTo(type, one));   //输出: "haha"
    System.out.println(convert.convertTo(type, list));  //输出: ["haha","hehe"]

    以太坊JSON-RPC规范接口 某些接口中的字段存在这种需求:

   3、ConvertImpl

     当一个对象字段类型是抽象类,反序列化时根据识别子类独有的字段转换成对应的子类, 需要使用ConvertImpl

    @ConvertImpl(types = {Bean123.class, Bean23.class, Bean234.class})
    publicabstract class AbstractBean {

    }

    public class Bean123 extends AbstractBean {

        public String a1;

        public String a2;

        public String a3;
    }

    public class Bean23 extends AbstractBean {

        public String a2;

        public String a3;
    }

    public class Bean234 extends AbstractBean {

        public String a2;

        public String a3;

        public String a4;
    }



    JsonConvert convert = JsonConvert.root();
    String json1 = "{'a1':'111', 'a2':'222', 'a3':'333'}";
    AbstractBean bean1 = convert.convertFrom(AbstractBean.class, json1); 
    System.out.println(bean1);  //Bean123对象
        
    String json2 = "{'a2':'222', 'a4':'444', 'a3':'333'}";
    AbstractBean bean2 = convert.convertFrom(AbstractBean.class, json2); 
    System.out.println(bean2);  //Bean234对象
        
    String json3 = "{'a3':'333'}";
    AbstractBean bean3 = convert.convertFrom(AbstractBean.class, json3); 
    System.out.println(bean3);  //Bean23对象, 无子类独有的字段,优先匹配特定字段数最少的子类
        
    String json4 = "{'a1':'111', 'a2':'222', 'a3':'333', 'a4':'444'}";
    AbstractBean bean4 = convert.convertFrom(AbstractBean.class, json4); 
    System.out.println(bean4);  //Bean123对象, a1字段在前面,优先匹配Bean123类

   以太坊JSON-RPC规范接口 某些接口同样存在这种需求。

   4、JsonMultiDecoder

     当一个数组的元素是不同的数据类型时,反序列化时需要使用JsonMultiDecoder(通过JsonConvert调用)

        JsonConvert convert = JsonConvert.root();
        String json = "['aaaa', ['hehe','haha']]";
        Type[] types = new Type[]{String.class, String[].class};
        Object[] objs = convert.convertFrom(types, json);
        System.out.println(objs[0]); //String对象  "aaaa"
        System.out.println(objs[1]); //String数组  ["hehe","haha"]

         注意:  json数组元素的个数必须与Type数组的长度一致。  JSON-RPC 的批量操作接口存在这种需求。

redkale命令行:

    bin下新增了redkale脚本, 通过脚本命令行可以更方便的操作: 


# 启动redkale进程,无参数
./bin/redkale

# 启动redkale进程
./bin/redkale  start  

# 关闭redkale进程
./bin/redkale  shutdown

# 重启redkale进程
./bin/redkale  restart

# 生成openapi文档
./bin/redkale  apidoc

    以上是redkale内置的命令,开发者可以通过@Command 自定义命令: 

    public class CommandTestService implements Service {

        @Command("say") //只接收say命令
        public String say(String cmd, String[] params) {
            System.out.println("say接收命令: " + cmd + ", 参数: " + Arrays.toString(params));
            return "say done";
        }

        @Command("hi") //只接收hi命令
        public String hi(String cmd, String[] params) {
            System.out.println("hi接收命令: " + cmd + ", 参数: " + Arrays.toString(params));
            return "hi done";
        }

        @Command  //会接收到所有命令
        public String all(String cmd, String[] params) {
            System.out.println("all接收命令: " + cmd + ", 参数: " + Arrays.toString(params));
            return "all done";
        }
    }

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/202108/redkale-2-7-0-released

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。