解决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>
public static <T> List<T> readListValue(String json, Class<T> tClazz){
return JSON.parseArray(json, tClazz);
}spring mvc 对于对象数组的接收无法用封装实体和直接在方法的接收参数上写。只能用这种方式。
谢谢观看
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 对于对象数组的接收无法用封装实体和直接在方法的接收参数上写。只能用这种方式。
谢谢观看
相关文章推荐
- SpringMvc报错解决:Failed to instantiate [java.util.List]: Specified class is an interface
- 关于运行期异常:Failed to instantiate [java.util.List]: Specified class is an interface
- 关于运行期异常:Failed to instantiate [java.util.List]: Specified class is an interface
- 关于运行期异常:Failed to instantiate [java.util.List]: Specified class is an interface
- 错误:Could not instantiate bean class [java.util.List]: Specified class is an interface
- Could not instantiate bean class [java.util.List]: Specified class is an interface] with root cause
- Failed to instantiate [org.springframework.data.domain.Pageable]: Specified class is an interface
- springMVC接受list报错:Could not instantiate bean class [java.util.List]: Specified class is an interf
- Failed to instantiate [org.springframework.data.domain.Pageable]: Specified class is an interface
- 解决Redisson出现Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'create' threw exception; nested exception is java.lang.ArrayIndexOutOfBoundsException: 0的问题
- java中Failed to read candidate component class的问题解决
- Java解决No enclosing instance of type PrintListFromTailToHead is accessible问题的两种方案
- mybatis报错:Could not instantiate bean class [Dao.stuDao]: Specified class is an interface
- Java解决No enclosing instance of type PrintListFromTailToHead is accessible问题
- Could not instantiate bean class [javax.servlet.ServletContext]: Specified class is an interface
- Could not instantiate bean class [org.springframework.data.domain.Pageable]: Specified class is an interface解决方案
- 关于打开Eclipse时出现eclipse failed to create the java virtual machine与locking is not possible in the directory问题的解决
- 解决此类问题:warning: unable to bind to property '' on class 'Object' (class is not an IEventDispatcher) .
- checkstyle问题:解决Got an exception - java.lang.RuntimeException: Unable to get class information for ***Exception
- Failed to convert from type java.lang.String to type java.util.Date for value………解决办法