因为jfianl没有getBeans/getModles方法,所以写了这个方法
前端值
ywlx: dlqlsqb
value: [{"sub_form":{"dlqlsqb.id":"","_jfinal_token":"971723637952346332","dlqlsqb.applyId":"","dlqlsqb.sblsh":"sblsh402880c57e0a3a72017e0aa4564f01dd","dlqlsqb.sbmc":"ytjhty","dlqlsqb.hypy":"123","dlqlsqb.ldyhdwhzyjzw":"123","dlqlsqb.mmhy":"123","dlqlsqb.ywlx":"dlqlsqb","dlqlsqb.ywlxName":"道路(街巷、桥梁、隧道)命名","dlqlsqb.zd":"","dlqlsqb.kd":"123","dlqlsqb.qddd":"","dlqlsqb.yddd":"213","dlqlsqb.qd":"","dlqlsqb.zzd":"","dlqlsqb.jsydghxkz":"","dlqlsqb.jsydghxkzhNf":"","dlqlsqb.jsydghxkzh":""},"sub_parm":"dlqlsqb.id=&_jfinal_token=971723637952346332&dlqlsqb.applyId=&dlqlsqb.sblsh=sblsh402880c57e0a3a72017e0aa4564f01dd&dlqlsqb.sbmc=ytjhty&dlqlsqb.hypy=123&dlqlsqb.ldyhdwhzyjzw=123&dlqlsqb.mmhy=123&dlqlsqb.ywlx=dlqlsqb&dlqlsqb.ywlxName=%E9%81%93%E8%B7%AF%EF%BC%88%E8%A1%97%E5%B7%B7%E3%80%81%E6%A1%A5%E6%A2%81%E3%80%81%E9%9A%A7%E9%81%93%EF%BC%89%E5%91%BD%E5%90%8D&dlqlsqb.zd=&dlqlsqb.kd=123&dlqlsqb.qddd=&dlqlsqb.yddd=213&dlqlsqb.qd=&dlqlsqb.zzd=&dlqlsqb.jsydghxkz=&dlqlsqb.jsydghxkzhNf=&dlqlsqb.jsydghxkzh="},{"sub_form":{"dlqlsqb.id":"","_jfinal_token":"-5500225404927983624","dlqlsqb.applyId":"","dlqlsqb.sblsh":"sblsh402880c57e0a3a72017e0aa5c44a01fa","dlqlsqb.sbmc":"tyhy","dlqlsqb.hypy":"zxc","dlqlsqb.ldyhdwhzyjzw":"zxc","dlqlsqb.mmhy":"xzc","dlqlsqb.ywlx":"dlqlsqb","dlqlsqb.ywlxName":"道路(街巷、桥梁、隧道)命名","dlqlsqb.zd":"zxc","dlqlsqb.kd":"zxc","dlqlsqb.qddd":"zxc","dlqlsqb.yddd":"zxc","dlqlsqb.qd":"zxc","dlqlsqb.zzd":"zxc","dlqlsqb.jsydghxkz":"","dlqlsqb.jsydghxkzhNf":"","dlqlsqb.jsydghxkzh":"zxc"},"sub_parm":"dlqlsqb.id=&_jfinal_token=-5500225404927983624&dlqlsqb.applyId=&dlqlsqb.sblsh=sblsh402880c57e0a3a72017e0aa5c44a01fa&dlqlsqb.sbmc=tyhy&dlqlsqb.hypy=zxc&dlqlsqb.ldyhdwhzyjzw=zxc&dlqlsqb.mmhy=xzc&dlqlsqb.ywlx=dlqlsqb&dlqlsqb.ywlxName=%E9%81%93%E8%B7%AF%EF%BC%88%E8%A1%97%E5%B7%B7%E3%80%81%E6%A1%A5%E6%A2%81%E3%80%81%E9%9A%A7%E9%81%93%EF%BC%89%E5%91%BD%E5%90%8D&dlqlsqb.zd=zxc&dlqlsqb.kd=zxc&dlqlsqb.qddd=zxc&dlqlsqb.yddd=zxc&dlqlsqb.qd=zxc&dlqlsqb.zzd=zxc&dlqlsqb.jsydghxkz=&dlqlsqb.jsydghxkzhNf=&dlqlsqb.jsydghxkzh=zxc"}]
applyId: 402880c57e0a3a72017e0aa68df40214
后端代码
private static <T> T createInstance(Class<T> objClass) {
try {
return objClass.newInstance();
} catch (Exception var2) {
throw new RuntimeException(var2);
}
}
public void saveSubTableData() throws IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException {
//value的值根据ywlx用反射注入到实体中
String originYwlx = getPara("ywlx");
String applyId = getPara("applyId");
char[] cs=originYwlx.toCharArray();
cs[0]-=32;
String convertYwlx = String.valueOf(cs);
JSONArray jsonArray = JSONArray.parseArray(getPara("value"));
boolean flag = true;
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
JSONObject data = (JSONObject) jsonObject.get("sub_form");
String parasMap = jsonObject.toJSONString();
TypeConverter converter = TypeConverter.me();
Class clz = Class.forName("com.huiyu.portal.business.model."+convertYwlx);
Object bean = createInstance(clz);
String beanName = originYwlx;
String modelNameAndDot = StrKit.notBlank(beanName) ? beanName + "." : null;
// 获得这个类的所有方法
Method[] methods = clz.getMethods();
// 循环查找想要的方法
for(Method method : methods) {
String methodName = method.getName();
if (methodName.startsWith("set") && methodName.length() > 3) {
Class<?>[] types = method.getParameterTypes();
if (types.length == 1) {
String attrName = StrKit.firstCharToLowerCase(methodName.substring(3));
String paraName = modelNameAndDot != null ? modelNameAndDot + attrName : attrName;
if (parasMap.contains(paraName)) {
try {
String paraValue = data.getString(paraName);
Object value = paraValue != null ? converter.convert(types[0], paraValue) : null;
method.invoke(bean, value);
} catch (Exception var19) {
throw new RuntimeException("Can not convert parameter: " + paraName, var19);
}
}
if("setId".equals(method.getName())) {
// 调用这个方法,invoke第一个参数是类名,后面是方法需要的参数
method.invoke(bean, createUUID());
}
if("setSbsj".equals(method.getName())) {
// 调用这个方法,invoke第一个参数是类名,后面是方法需要的参数
method.invoke(bean, new Date());
}
if("setApplyId".equals(method.getName())) {
// 调用这个方法,invoke第一个参数是类名,后面是方法需要的参数
method.invoke(bean, applyId);
}
}
}
}
// 调用指定方法
boolean state = (boolean) clz.getMethod("save").invoke(bean, null);
if (state == false){
flag = false;
}
}
if(flag){
renderJson(ok(applyId));
}else{
renderJson(fail());
}
}