SSH(Spring+SpringMVC+hibernate+Maven) 项目 使用jackson报转换异常

来源:互联网 发布:阿里云产品 编辑:程序博客网 时间:2024/06/05 11:50

如题,详细情况如下。

在系统中,入口接口使用了反射技术反射对传入的消息进行映射

整个审核流程--不要慌着复制代码,正确代码在后面的

项目采用了出入口消息机制,现在到了批量导入数据功能:

于是我就想了,直接把消息体转换成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>();}
测试方法如下:

@Testpublic 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,我内部再转换一次一次就是了;

前端测试代码

@Testpublic void testRequest() throws Exception {RequestMessage m1 = new RequestMessage();ObjectMapper mapper = new ObjectMapper();m1.id = "007";//import departList<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;}

于是可以处理了。

总结 -- 不是非要走什么路不可,什么路你看到了能走就走。




0 0
原创粉丝点击