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

1 篇文章 0 订阅
1 篇文章 0 订阅

如题,详细情况如下。

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

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

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

于是我就想了,直接把消息体转换成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;
	}

于是可以处理了。

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值