前天搞了下省市区
发现不是存省市区就是存省市区的code值
而前端一般只有存code或者中文
很少两个值并存,
本来vue接触的少
(自己的前端水平也是喳喳的存在)
萌生了写个后台工具类想法
实现目标
code能够转成对应的中文省市区
中文省市区能够转化code
因为尽量要写的通用化一点
所以所有有关于省市区的类都要能够调用
想到这里,我突然发现好像反射里面有这个东西
就简单的写了个工具类
首先
先准备两个map
1.key 是code value是 省市区
350000:福建省,351000某某市,351001某某区键值对
2.key 是(省份默认是0)父级id+省市区 value是code
//0福建省350000,350000某某市351000,351000某某区351001键值对
然后主要代码,主要是分两种
/**
* 设置省市区code 或者设置
* @param obj 需要设置省市区的实体
* @param map 需要翻译的map值
* @param type 需要执行的类型
* @return
*/
public static void setAddress(Object obj, Map<String,String> map, String type){
Class c = obj.getClass();
/*
* 2.获取方法 名称和参数列表来决定 getMethod获取的是public的方法 getDelcaredMethod自己声明的方法
*/
try {
//code 转 省份
if(DictConstant.NUM_ONE.equals(type)){
Method mProvince = c.getMethod(“getProvince” );
Object oProvince = mProvince.invoke(obj);
Method mProvinceName = c.getMethod(“setProvinceName”, String.class);
if(oProvince!=null){
mProvinceName.invoke(obj,map.get(oProvince.toString()));
}
Method mCity = c.getMethod(“getProvince” );
Object oCity = mCity.invoke(obj);
Method mCityName = c.getMethod(“setProvinceName”, String.class);
if(oCity!=null){
mCityName.invoke(obj,map.get(oCity.toString()));
}
Method mArea = c.getMethod(“getProvince” );
Object oArea= mArea.invoke(obj);
Method mAreaName = c.getMethod(“setProvinceName”, String.class);
if(oArea!=null){
mAreaName.invoke(obj,map.get(oArea.toString()));
}
}
// 省份转 code
if(DictConstant.NUM_TWO.equals(type)){
Method mProvince = c.getMethod(“getProvinceName” );
Object oProvince = mProvince.invoke(obj);
Method mProvinceCode = c.getMethod(“setProvince”, String.class);
String provinceCode=map.get(DictConstant.NUM_ZERO +oProvince.toString());
if(oProvince!=null){
mProvinceCode.invoke(obj,provinceCode);
}
Method mCity = c.getMethod(“getCityName” );
Object oCity = mCity.invoke(obj);
Method mCityName = c.getMethod(“setCity”, String.class);
String cityCode=map.get(provinceCode+oCity.toString());
if(oCity!=null){
mCityName.invoke(obj,cityCode);
}
Method mArea = c.getMethod(“getAreaName” );
Object oArea= mArea.invoke(obj);
Method mAreaName = c.getMethod(“setArea”, String.class);
String areaCode=map.get(cityCode+oArea.toString());
if(oArea!=null){
mAreaName.invoke(obj,areaCode);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
调用方法
AddressUtil.setAddress(sysUserDetatil,ConfigConstant.ADDRESS_NAME_MAP,DictConstant.NUM_TWO);
大概就是这么回事