如题,详细情况如下。
在系统中,入口接口使用了反射技术反射对传入的消息进行映射
整个审核流程--不要慌着复制代码,正确代码在后面的
项目采用了出入口消息机制,现在到了批量导入数据功能:
于是我就想了,直接把消息体转换成List然后导入不就好了于是就写了方法(被反射方法)如下
<pre style="box-sizing: inherit; overflow-x: auto; overflow-y: hidden; font-family: Menlo, 'Liberation Mono', Consolas, 'Courier New', 'andale mono', 'lucida console', monospace; color: rgb(51, 51, 51); border: none; border-radius: 0px; margin-top: 0px; margin-bottom: 0px; padding: 10px 0px; word-wrap: normal; line-height: 16px !important; background-color: rgb(244, 244, 244);"><div class="line" id="LC39" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"><span class="cm" style="box-sizing: inherit; color: rgb(136, 136, 136); font-style: italic;"><span style="white-space:pre"> </span>/**</span>
</div><div class="line" id="LC40" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"><span class="cm" style="box-sizing: inherit; color: rgb(136, 136, 136); font-style: italic;"> * excel -- >导入数据区域</span>
</div><div class="line" id="LC41" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"><span class="cm" style="box-sizing: inherit; color: rgb(136, 136, 136); font-style: italic;"> */</span>
</div><div class="line" id="LC42" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="kd" style="box-sizing: inherit; font-weight: bold;">public</span> <span class="kt" style="box-sizing: inherit; color: rgb(68, 85, 136); font-weight: bold;">boolean</span> <span class="n" style="box-sizing: inherit;">importDepart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">(</span><span class="n" style="box-sizing: inherit;">List</span> <span class="n" style="box-sizing: inherit;">com</span><span class="o" style="box-sizing: inherit; font-weight: bold;">)</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">{</span>
</div><div class="line" id="LC43" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="kt" style="box-sizing: inherit; color: rgb(68, 85, 136); font-weight: bold;">boolean</span> <span class="n" style="box-sizing: inherit;">mark</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">=</span> <span class="kc" style="box-sizing: inherit; font-weight: bold;">true</span><span class="o" style="box-sizing: inherit; font-weight: bold;">;</span>
</div><div class="line" id="LC44" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="kt" style="box-sizing: inherit; color: rgb(68, 85, 136); font-weight: bold;">int</span> <span class="n" style="box-sizing: inherit;">i</span><span class="o" style="box-sizing: inherit; font-weight: bold;">=</span><span class="mi" style="box-sizing: inherit; color: rgb(0, 153, 153);">0</span><span class="o" style="box-sizing: inherit; font-weight: bold;">;</span>
</div><div class="line" id="LC45" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="k" style="box-sizing: inherit; font-weight: bold; color: rgb(0, 0, 0);">for</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">(</span><span class="n" style="box-sizing: inherit;">Object</span> <span class="n" style="box-sizing: inherit;">object</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">:</span> <span class="n" style="box-sizing: inherit;">com</span><span class="o" style="box-sizing: inherit; font-weight: bold;">)</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">{</span>
</div><div class="line" id="LC46" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="k" style="box-sizing: inherit; font-weight: bold; color: rgb(0, 0, 0);">if</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">(</span><span class="n" style="box-sizing: inherit;">mark</span><span class="o" style="box-sizing: inherit; font-weight: bold;">)</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">{</span>
</div><div class="line" id="LC47" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="n" style="box-sizing: inherit;">com</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">cqvie</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">controller</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">msg</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">Depart</span> <span class="n" style="box-sizing: inherit;">depart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">=(</span><span class="n" style="box-sizing: inherit;">com</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">cqvie</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">controller</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">msg</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">Depart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">)</span> <span class="n" style="box-sizing: inherit;">object</span><span class="o" style="box-sizing: inherit; font-weight: bold;">;</span>
</div><div class="line" id="LC48" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="n" style="box-sizing: inherit;">mark</span><span class="o" style="box-sizing: inherit; font-weight: bold;">=</span><span class="n" style="box-sizing: inherit;">addDepart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">(</span><span class="n" style="box-sizing: inherit;">depart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">);</span>
</div><div class="line" id="LC49" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="n" style="box-sizing: inherit;">System</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">out</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">println</span><span class="o" style="box-sizing: inherit; font-weight: bold;">(</span><span class="n" style="box-sizing: inherit;">depart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">toString</span><span class="o" style="box-sizing: inherit; font-weight: bold;">());</span>
</div><div class="line" id="LC50" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="n" style="box-sizing: inherit;">i</span><span class="o" style="box-sizing: inherit; font-weight: bold;">++;</span>
</div><div class="line" id="LC51" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="o" style="box-sizing: inherit; font-weight: bold;">}</span>
</div><div class="line" id="LC52" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="o" style="box-sizing: inherit; font-weight: bold;">}</span>
</div><div class="line" id="LC53" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="k" style="box-sizing: inherit; font-weight: bold; color: rgb(0, 0, 0);">if</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">(</span><span class="n" style="box-sizing: inherit;">i</span><span class="o" style="box-sizing: inherit; font-weight: bold;">!=</span><span class="n" style="box-sizing: inherit;">com</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">size</span><span class="o" style="box-sizing: inherit; font-weight: bold;">())</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">{</span>
</div><div class="line" id="LC54" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="n" style="box-sizing: inherit;">i</span><span class="o" style="box-sizing: inherit; font-weight: bold;">--;</span>
</div><div class="line" id="LC55" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="k" style="box-sizing: inherit; font-weight: bold; color: rgb(0, 0, 0);">for</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">(</span><span class="n" style="box-sizing: inherit;">Object</span> <span class="n" style="box-sizing: inherit;">object</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">:</span> <span class="n" style="box-sizing: inherit;">com</span><span class="o" style="box-sizing: inherit; font-weight: bold;">)</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">{</span>
</div><div class="line" id="LC56" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="n" style="box-sizing: inherit;">com</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">cqvie</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">controller</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">msg</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">Depart</span> <span class="n" style="box-sizing: inherit;">depart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">=(</span><span class="n" style="box-sizing: inherit;">com</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">cqvie</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">controller</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">msg</span><span class="o" style="box-sizing: inherit; font-weight: bold;">.</span><span class="na" style="box-sizing: inherit; color: rgb(0, 128, 128);">Depart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">)</span> <span class="n" style="box-sizing: inherit;">object</span><span class="o" style="box-sizing: inherit; font-weight: bold;">;</span>
</div><div class="line" id="LC57" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="k" style="box-sizing: inherit; font-weight: bold; color: rgb(0, 0, 0);">if</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">(</span><span class="n" style="box-sizing: inherit;">i</span><span class="o" style="box-sizing: inherit; font-weight: bold;">></span><span class="mi" style="box-sizing: inherit; color: rgb(0, 153, 153);">0</span><span class="o" style="box-sizing: inherit; font-weight: bold;">)</span> <span class="o" style="box-sizing: inherit; font-weight: bold;">{</span>
</div><div class="line" id="LC58" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="n" style="box-sizing: inherit;">mark</span><span class="o" style="box-sizing: inherit; font-weight: bold;">=</span><span class="n" style="box-sizing: inherit;">delDepart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">(</span><span class="n" style="box-sizing: inherit;">depart</span><span class="o" style="box-sizing: inherit; font-weight: bold;">);</span>
</div><div class="line" id="LC59" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="n" style="box-sizing: inherit;">i</span><span class="o" style="box-sizing: inherit; font-weight: bold;">--;</span>
</div><div class="line" id="LC60" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="o" style="box-sizing: inherit; font-weight: bold;">}</span>
</div><div class="line" id="LC61" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="o" style="box-sizing: inherit; font-weight: bold;">}</span>
</div><div class="line" id="LC62" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="k" style="box-sizing: inherit; font-weight: bold; color: rgb(0, 0, 0);">return</span> <span class="kc" style="box-sizing: inherit; font-weight: bold;">false</span><span class="o" style="box-sizing: inherit; font-weight: bold;">;</span>
</div><div class="line" id="LC63" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="o" style="box-sizing: inherit; font-weight: bold;">}</span>
</div><div class="line" id="LC64" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="k" style="box-sizing: inherit; font-weight: bold; color: rgb(0, 0, 0);">return</span> <span class="kc" style="box-sizing: inherit; font-weight: bold;">true</span><span class="o" style="box-sizing: inherit; font-weight: bold;">;</span>
</div><div class="line" id="LC65" style="box-sizing: inherit; padding: 0px 10px; height: 16px;"> <span class="o" style="box-sizing: inherit; font-weight: bold;">}</span></div>
然而,居然报错了! 报类型转换错误
好吧,思来想去,做了个类包起来,因为其他地方都是用类包起来的。
于是有了这个类
public class ImportData<E> {
public List<E> list=new ArrayList<E>();
}
测试方法如下:
@Test
public void testImportDepart() throws JsonParseException, JsonMappingException, IOException {
List<<span style="font-family: Arial, Helvetica, sans-serif;">Depart</span><span style="font-family: Arial, Helvetica, sans-serif;">> com = new ArrayList<</span><span style="font-family: Arial, Helvetica, sans-serif;">Depart</span><span style="font-family: Arial, Helvetica, sans-serif;">>();</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span> Depart depart = new Depart(null, "dName", "dWork", "dCall", "dMan",
"dMaster", 0, 0);
Depart depart2 = new Depart(null, "dName1", "dWork", "dCall", "dMan",
"dMaster", 0, 0);
Depart depart3 = new Depart(null, "dName2", "dWork", "dCall", "dMan",
"dMaster", 0, 0);
Depart depart4 = new Depart(null, "dName3", "dWork", "dCall", "dMan",
"dMaster", 0, 0);
// com.add(depart);
com.add(depart2);
com.add(depart3);
com.add(depart4);
ImportData data=new ImportData();
data.com=com;
System.out.println(userService.importDepart(data));
}
然后还是有问题。
尝试过 以下解决方案
1.http://www.jb51.net/article/55423.htm
//List的第二种遍历方式:利用Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
2.http://blog.csdn.net/QH_JAVA/article/details/44083333
3.http://stackoverflow.com/questions/28821715/java-lang-classcastexception-java-util-linkedhashmap-cannot-be-cast-to-com-test
终究无果,火了。
咦,突然想到了什么,别挡我,我要出绝招了!
在前端传数据的时候,直接要求传入List<String>,反正是json,我内部再转换一次一次就是了;
前端测试代码
@Test
public void testRequest() throws Exception {
RequestMessage m1 = new RequestMessage();
ObjectMapper mapper = new ObjectMapper();
m1.id = "007";
//import depart
List<String> com = new ArrayList<String>();
Depart depart = new Depart(null, "dName", "dWork", "dCall", "dMan",
"dMaster", 0, 0);
Depart depart2 = new Depart(null, "dName1", "dWork", "dCall", "dMan",
"dMaster", 0, 0);
Depart depart3 = new Depart(null, "dName2", "dWork", "dCall", "dMan",
"dMaster", 0, 0);
Depart depart4 = new Depart(null, "dName3", "dWork", "dCall", "dMan",
"dMaster", 0, 0);
// com.add(mapper.writeValueAsString(depart));
com.add(mapper.writeValueAsString(depart2));
com.add(mapper.writeValueAsString(depart3));
com.add(mapper.writeValueAsString(depart4));
ImportData data=new ImportData();
data.com=com;
m1.proc="userService_importDepart";
m1.data=mapper.writeValueAsString(data);
System.out.println("--> web :\n"+m1.data);
UserController uc = new UserController();
uc.userService = this.userService; // !!!
ResponseMessage m2 = uc.web(m1);
System.out.println(m2.toString());
}
后端处理方法
/**
* excel -- >导入数据区域
* @throws IOException
* @throws JsonMappingException
* @throws JsonParseException
*/
public boolean importDepart(ImportData importData) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper=new ObjectMapper();
List<String> com=importData.com;
List<com.cqvie.controller.bsentity.Depart> departs=new ArrayList<com.cqvie.controller.bsentity.Depart>();
boolean mark = true;
int i=0;
for (String de : importData.com) {
com.cqvie.controller.bsentity.Depart depart=new com.cqvie.controller.bsentity.Depart();
depart=mapper.readValue(de,depart.getClass());
departs.add(depart);
if (mark) {
mark=addDepart(depart);
System.out.println(depart.toString());
i++;
}
}
if (i!=com.size()) {
i--;
for (com.cqvie.controller.bsentity.Depart depart : departs) {
if (i>0) {
mark=delDepart(depart);
i--;
}
}
return false;
}
return true;
}
于是可以处理了。
总结 -- 不是非要走什么路不可,什么路你看到了能走就走。