DUBBO——搭建低代码平台——参数解析

136 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

背景

dubbo泛化调用最重要的一步是参数解析。需要提供参数类型,以及参数值。开发者只能提供参数名,参数类型名,以及调用时提供的参数值(String)。

因此需要进行参数解析,同过参数类型名,获取参数类型。将参数值(String)转换为参数实际类型值。

目标参数结构

参数类型名--参数值

已有参数结构信息

参数名--参数类型名---参数值(String)

根据已有参数结构信息,获取目标参数结构,只需要将String 参数值转化为实际参数值

转化参数值

参数类型先简单分为基本类型与简单类类型。

基本类型

对于基本类型与对应的包装类型

可以根据类型名直接将String转换为对应类型的参数值。

基本类型包装类
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

POJO简单类类型

对于自定义简单类类型

如下面的User类,其参数类型名即为其所在包路径:如com.pdd.User; 

class User {


    String name;


    int id;


    int age;


    

已有的String参数值如表示为json为:

{


    "name":"aaa",


    "id":1001,


    "age":23


}

为了远程dubbo服务能识别所传过去的参数值的类型,需要使用如下map,来指定参数值的类型,

{


    "class":"com.pdd.User" //标识具体类型


    "name":"aaa",


    "id":1001,


    "age":23


}

参数配置

能力接入时,需要存储能力下的调用接口(dubbo)的配置

class ServiceConfig{


    String serviceName;


    String methodName;


    List<ParamConfig> paramConfig;


}








class ParamConfig{


    String paramName; //参数名


    String paramType; //参数类型


    List<AttributeConfig> attributeConfig;


}








class AttributeConfig{


    String attrName; //属性名


    String attrType; //属性类型


    List<AttributeConfig> subAttributeConfig;  //子属性


}

列入对于服务testService 的方法test(Person person);

class Person {


    String name;


    Student student;


}


class Student {


    int id;


    int level;


}

参照上述配置,需要前端提供的json为:

{    


    "serviceName":"com.pdd.testService",   //服务名


    "methodName":"test",  //方法名


    "paramConfig":[                      //参数配置


    {


        "paramName":"person",


        "paramType":"com.pdd.model.Person",


        "attributeConfig":[


        {


            "attrName":"name",


            "attrType":"java.lang.String"


            "subAttributeConfig":[]


        },


        {


            "attrName":"student",


            "attrType":"com.pdd.model.Student"


            "subAttributeConfig":[


            {


                "attrName":"id"


                "attrType":"int",


                "subAttributeConfig":[]


            },


            {


                "attrName":"level"


                "attrType":"int",


                "subAttributeConfig":[]


            }


            ]


        


        ]


    }


    ]


}

根据以上配置,进行值填充后,可构建对应的map,作为该参数类型的参数值