错误信息提示
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 对于对象数组的接收无法用封装实体和直接在方法的接收参数上写。只能用这种方式。
谢谢观看