您的位置:首页 > 编程语言 > Java开发

解决Failed to instantiate [java.util.List]: Specified class is an interface问题

2017-05-08 09:27 555 查看
错误信息提示

Failed to instantiate [java.util.List]: Specified class is an interface;

错误信息意思:

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

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


错误时java代码


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

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

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

解决办法:

将VO对象再进行封装: 



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



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

第二种问题:

前台js要给方法传递即传递普通参数也传递对象数组,用普通的方法定义参数中和实体封装都无法接收到对象数组List<User>对象,参数错误
解决方法:
首先修改ajax传递参数的方式,JSON.stringify(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);
perArr.push({
id: $(this).attr("data-id"),
splitRate: $(this).val()
})
}catch(e){layer.msg("");console.log(e)}
}
})
if(per !== 100){layer.msg("百分比和应为100");return;}

var obj = G_data.caseList;
console.log(obj);
obj.userls = JSON.stringify(perArr);
console.log(obj);
$.ajax({
type: "post",
url: "/caseList/split/casePreparatorySplit",
/* contentType: "application/json",
dataType: 'json', */
//traditional: true,
data: obj,
success: function(data){
G_data.preList = data.result;
$("#caseDetail").bootstrapTable('destroy');
loadList(data.result);
}
})
/* $.post("/caseList/split/casePreparatorySplit",obj,function(data){

}) */

})controller接收方法:用string类型接收user数组对象然后用JsonUtil.readListValue(userls, User.class);转化格式为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 = SessionUtil.getCompnayCodeFromSessionByCuishouAdminOrUser(session);
// 查询未分配案件参数
exParams.setAllotParam(0);//未分配的案件
caseHead.setOnhandstatus(0);//在催的案件

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

for (int i = 0; i < users.size() ; i++) {
User u = userService.queryUserByWhere(users.get(i));
if (u != null){
//将查询出来的用户放上百分比参数
u.setSplitRate(users.get(i).getSplitRate());
userList.add(u);
}
}
List<User> list = caseHeadService.updateAutoCaseSplit(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.parseArray(json, tClazz);
}spring mvc 对于对象数组的接收无法用封装实体和直接在方法的接收参数上写。只能用这种方式。

谢谢观看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐