前言
什么是异构系统呢?实际上就是存在着多种语言的系统,这样的系统尤其可能出现在初创公司在更换技术栈的时候。比如说早期的淘宝、天猫一开始使用的也是php语言,后来才逐渐的转到了java的温暖怀抱。
那么实际上,本文想要讨论的就是java接口在被调用的时候如何实现数据命名的规范化处理。
背景
现在的互联网公司很大一部分都采用restful格式的接口为前端提供数据,但是对于动态语言js来说,他们的命名是以下划线作为标准的,但我们在提供接口的时候并不希望去把我们接口的出入参,定义成那种样式,因此,需要动态的数据转换。
思路
实际上,我们这里可以自己写一个适配器,然后采取泛型的方式将需要转换的对象传入,然后进行转换。但是,再造轮子前我们可以先看看有没有现成的解决方案。实际上,spring为我们提供了这样的解决方案。
下面来一起看看,spring官网给出的定义:
上面的内容无非就是告诉我们需要实现一个数据的适配器,就可以实现数据的转换。ok,先定义需要转换的类:
@Data
public class User_php {
private String user_Name;
private String user_Pass;
}
@Data
public class User implements Serializable {
private String userName;
private String userPass;
}
然后就是实现我们需要的适配器,啊哈,
public class TaoBaoAdaptor implements Converter<User_php, User> {
@Override
public User convert(User_php source) {
User user = new User();
user.setUserName(source.getUser_Name());
user.setUserPass(source.getUser_Pass());
return user;
}
}
最后,当然就是要将这个适配器注册到一个地方去,然后直接调用其中的convert方法即可,简直妙哉。
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.henry.TaoBaoAdaptor"/>
</set>
</property>
</bean>
然后在需要转换的地方,实例化这个service,调用方法即可!例子如下:
User user = conversionService.convert(userPhp, User.class);
啊哈,上面的userPhp就是UserPhp的实例,现在我们就可以达到动态的转换的目的了!实在不能太棒!你传进去的类型,会自动在刚才的service中寻找,进行动态的变换。
总结
异构系统的各种语言的兼容确实是一件比较复杂的问题,值得我们去不断的思考!当然,针对今天讨论的内容,我们也可以自己实现。以后有机会可以自己写写!