解决Failed to instantiate []: Specified class is an interface问题

时间:2024-10-30 20:22:08

错误信息提示

Failed to instantiate []: Specified class is an interface;

错误信息意思:

        参数错误,参数封装出了问题。

解决方案有两种:(主要问题是第二种
第一种:将参数封装到实体中


错误时java代码

   前端给后台传递了一个list对象,本来以为直接用list 可以接收,但是运行方法报错,参数错误。

           查询错误问题,发现是前端传递的对象,后台没有set,get的实体接收。

controller中参数List内封装的不是基本数据类型,而是一个对象,springMVC源码获取前台的参数是:("")来接收参数的,这样的话,封装参数时就出问题了。


解决办法:

将VO对象再进行封装: 


换一个专门存放想要接受的实体的javaBean,定义方式如下:




这样就可以接收到 从前端传递过来的 list<Attachment> 对象。

第二种问题:
前台js要给方法传递即传递普通参数也传递对象数组,用普通的方法定义参数中和实体封装都无法接收到对象数组List<User>对象,参数错误
解决方法:
首先修改ajax传递参数的方式,(perArr); 将数组转化成json,然后后台用字符串接受再转化格式

	//预分配
			$("#preBtn").click(function(){
				var per = 0;
				var perArr= [];
				$(".percent-input").each(function(){
					var num = $(this).val();
					if(num && num != 0){
						try{
							per += 	parseFloat(num);
							({
								id: $(this).attr("data-id"),
								splitRate: $(this).val()
							})
						}catch(e){("");(e)}
					}
				})
				if(per !== 100){("百分比和应为100");return;}
				
				var obj = G_data.caseList;
				(obj);
				 = (perArr);
				(obj);
				$.ajax({
					type: "post",
					url: "/caseList/split/casePreparatorySplit",
					/* contentType: "application/json",  
					dataType: 'json',   */
					//traditional: true,
					data: obj,
					success: function(data){
						G_data.preList = ;
						$("#caseDetail").bootstrapTable('destroy');
						loadList();
					}
				})
				/* $.post("/caseList/split/casePreparatorySplit",obj,function(data){
					
				}) */
				
			})
controller接收方法:用string类型接收user数组对象然后用(userls, );转化格式为list<user>
/**
	 * 执行自动分案预生成结果
	 *
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/split/casePreparatorySplit")
	@ResponseBody
	public Result casePreparatorySplit(HttpSession session, CaseHead caseHead, CaseParamsExtend exParams,@RequestParam String userls) throws Exception {
		if (caseHead == null){
			return new Result(1, "参数错误");
		}

		String companycode="";
		companycode = (session);
		// 查询未分配案件参数
		(0);//未分配的案件
		(0);//在催的案件

		//查询用户list
		List<User> userList=new ArrayList<User>();
		List<User> users = (userls, );

		for (int i = 0; i < () ; i++) {
			User u = ((i));
			if (u != null){
				//将查询出来的用户放上百分比参数
				((i).getSplitRate());
				(u);
			}
		}
		List<User> list = (caseHead, exParams, userList,companycode);//案件信息。分配人信息,公司编码。表名
		Result result = new Result(0, list);
		return result;
	}
  jsonUtil工具类转化类型方法

public static <T> List<T> readListValue(String json, Class<T> tClazz){
		return (json, tClazz);
	}
spring mvc 对于对象数组的接收无法用封装实体和直接在方法的接收参数上写。只能用这种方式。


谢谢观看