//需要字段转换的序列维护
public static final Map<String,Integer> o = new HashMap<>();
static {
o.put("1001", 0);
o.put("1002", 1);
o.put("1003", 2);
o.put("9999", 3);
}
实体类
注意,字段需要改为public,否则注解要加到set方法上,这样才能根据alternateNames别名来动态生成字段
如果是json转实体类,将别名注解添加到get方法上
@JSONField(name = "No11",alternateNames = {"No1","No2","No3","No4"})
public String applyItemNo;
转换方法
public static void genReqBySeq(Class clz,String seq) {
Field[] fields = clz.getFields();
for (Field field : fields) {
JSONField fieldAnnotation = field.getAnnotation(JSONField.class);
if (fieldAnnotation==null) {
continue;
}
String[] alternateNames = fieldAnnotation.alternateNames();
Integer index = o.get(seq);
if (alternateNames.length<=index) {
continue;
}
Object handler = Proxy.getInvocationHandler(fieldAnnotation);
try {
Field f = handler.getClass().getDeclaredField("memberValues");
f.setAccessible(true);
Map<String, Object> memberValues = (Map<String, Object>) f.get(handler);
memberValues.put("name", alternateNames[seq]);
} catch (Exception e) {
throw BizException.error("实体类添加属性失败:"+clz.getName());
}
}
}