最近在2个功能已经差不多实现的系统中做接口交接系统,通过A系统传过来的参数,自己处理后对应到B系统所需参数,让B去实现功能最终返回结果。
1.由于双方在接口定义时没有怎么统一,所以在交接时候出现了, 实现编辑和删除时由于A系统发送的是整型Id 1 2 3 4 而B系统在具体实现新增时,自定义主键为36位guid类型的Id值:94f26f5c-ba83-4209-bd07-f5e8b01e11b5
2.刚开始双方协调都希望对方加个Id对应下,但是A由于已经按照接口联调了几家了,B的系统也已经有很多公司在使用了,并且由于我是只做参数转发,所以自己建库保存映射关系就失去了我的中间系统的意义,最后决定了在B上按照A给我的ID 我再补足36位转发给B实现,即B在新增时,主键Id由我根据A的ID补足36位生成。
废话那么多,其实就是想说明下需求背景 调用方 实现方 接口定义不统一害死人!!
下面来说下具体实现 其实很简单 就只是定义一个String类型36位变量,然后根据A系统传过来的Id长度 截取这个变量,再将A 的Id补上去,得到的就是满足需求的目标值了 主要使用到了String类的substring方法 然后还有replace replaceAll由于不知道到底是哪些字符被替换 所以replace 系列 方法不适用此需求
代码为:
/**
* 得到补足36位的Id值
*
* @param str 36位变量
* @return 返回经过补足的id类型
*/
public String getComplementId(String str,String targetId){
String resultId = str.substring(0, str.length()-targetId.length())+targetId;
if(StringUtils.isEmpty(resultId)){
return null;
}else{
return resultId;
}
}
str 为定义的满足B系统实现Id be60d293-907a-4fe4-8fb1-0a61f0fd4555
targetId A传过来的整型ID 我把他转为String 213
resultId 最终得到的结果值 be60d293-907a-4fe4-8fb1-0a61f0fd4213
顺带提一下 String 的 replaceAll() replace()
两个方法在具体实现功能是一样的 将目标字符串替换为指定的字符串
String guid2 = "areaarea-jied-0000-0000-00000213";
String ada = guid.replaceAll("0000", "1111");
String da = guid.replace("0000", "1111");
输出:
areaarea-daqu-1111-1111-11110213
areaarea-daqu-1111-1111-11110213
只是
当使用转义字符进行替换的时候,是有区别的。replaceAll的参数就是regex,是正则表达式。首先会转义 当然处理不当就会出错
并且 replace方法内也调用了replaceAll 所以性能上replaceAll 好一些
所以
当字符串无法确定是否具有转义字符时,而且也不需要转义时,建议使用replace函数 否则,使用replaceAll函数