springMVC接受list报错:Could not instantiate bean class [java.util.List]: Specified class is an interf

来源:互联网 发布:杭电网络攻防平台 编辑:程序博客网 时间:2024/05/30 04:30

在使用Spring MVC开发的时候,我遇到了如下的问题:

错误提示

图1:错误提示

我前端用的是ExtJS框架,报错信息为:Could not instantiate bean class [java.util.List]: Specified class is an interface,如上图1所示。后来我发现是注入的问题,由于Spring在注入的时候,不允许注入一个List类型的对象,如下图2所示:

错误的List注入方式

图2:错误的List注入方式

如上图2所示,这种是将一个list注入,如果这样写,会发现报图1中的错误。这个时候可以这么做,首先定义一个实体类,实体类中定义个List类型的成员属性,然后生成getter/setter方法,然后再以此作为对象注入如下图3和图4所示:

实体

图3:实体

正确的注入方式

图4:正确的注入方式

如上所示,问题得到解决,后面我就传进来一个json数据,然后注入进去了,实例化成功了。

来自:http://yedward.net/?id=289


我的解决办法:

页面代码:

/** * 保存 */ function save(){//所有数据    var data = $("#bootstrapTable").bootstrapTable("getData");var list = new Array();for (var i = 0 ; i < data.length ; i++) {var comparativePriceVo = {};    comparativePriceVo["id"] =  i;comparativePriceVo["dispatchBillGoodsId"] = data[i].dispatchBillGoodsId;comparativePriceVo["materialCode"] =  data[i].materialCode;;comparativePriceVo["standardPice"] =  data[i].standardPice;;comparativePriceVo["unitPrice"] =  data[i].unitPrice;;comparativePriceVo["qualifiedAcceptCount"] =  data[i].qualifiedAcceptCount;list.push(comparativePriceVo);} var params = {};params.listJsonData = JSON.stringify(list);$.ajax({type: "POST",url: "${base}/comparativePrice/save",async: false,data: $.param( params ),dataType: "json",success: function (data) {if ( data.result ) {alert("保存成功,结果:" + data.data, '友情提示');}else{alert("网络错误:保存失败", '友情提示');}}}); }

后台代码:

/** * 保存 * @param list * @return */@RequestMapping("/save")@ResponseBodypublic ResponseEntity<JsonResult> saveComparativePriceGoods(String listJsonData) {com.gt.core.jackson.JsonUtils.readJsonMap(listJsonData);List<ComparativePriceVO> list = new ArrayList<ComparativePriceVO>();list = JsonUtils.readJsonList(listJsonData, ComparativePriceVO.class);return ControllerHelper.returnJSONResult(true, "保存比较价物资成功", list );}


package com.gt.util.web;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpStatus;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import org.springframework.ui.Model;import com.gt.util.web.JsonResult.ErrorCode;public class ControllerHelper {/** * 导航到错误页面 *  * @param model * @param errorInfo * @return */public static String navErrorPage(Model model, String errorInfo) {model.addAttribute("errorinfo", errorInfo);return "error/error";}/** * 返回标准JSON返回值 *  * @param result * @param message * @return */public static ResponseEntity<JsonResult> returnJSONResult(boolean result, String message) {return returnJSONResult(result, message, null);}/** * 返回标准JSON返回值 *  * @param result * @param message * @param data * @return */public static ResponseEntity<JsonResult> returnJSONResult(boolean result, String message, Object data) {return returnJSON(new JsonResult(result, message, data));}/** * 返回标准JSON返回值 *  * @param result * @param errorCode * @param message * @param data * @return */public static ResponseEntity<JsonResult> returnJSONResult(boolean result, ErrorCode errorCode, String message, Object data) {return returnJSON(new JsonResult(result, errorCode, message, data));}/** * 返回给定数据的JSON格式 *  * @param data * @return */public static <T> ResponseEntity<T> returnJSON(T data) {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.parseMediaType(MediaType.TEXT_PLAIN + "; charset=utf-8"));return new ResponseEntity<T>(data, headers, HttpStatus.OK);}/** * 返回给定数据的STREAM格式(二进制) *  * @param data * @return */public static ResponseEntity<?> returnData(Object data) {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);return new ResponseEntity<Object>(data, headers, HttpStatus.OK);}public static ResponseEntity<?> returnBadRequestData() {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);return new ResponseEntity<Object>(null, headers, HttpStatus.BAD_REQUEST);}public static ResponseEntity<JsonResult> returnJSONResult(boolean result, ErrorCode errorCode, String message) {return returnJSON(new JsonResult(result, errorCode, message, null));}/** * 返回处理结果,自动封装错误提示 *  * @param b * @param javaCodeError * @return */public static ResponseEntity<JsonResult> returnJSONResult(ErrorCode errorCode, boolean result) {return returnJSON(new JsonResult(result, errorCode, errorCode.getDisplay(), null));}}

package com.gt.util.web;/** * Json操作反馈对象 *  * */public class JsonResult {public JsonResult(boolean result) {this(result, null);}public JsonResult(boolean result, String message) {this(result, message, null);}public JsonResult(boolean result, Object data) {this(result, null, data);}public JsonResult(boolean result, String message, Object data) {this.result = result;this.message = message;this.data = data;}public JsonResult(boolean result, ErrorCode errorCode, String message,Object data) {this.result = result;if(errorCode!= null){this.errorCode = errorCode.getCode();}this.message = message;this.data = data;}/** * 操作结果 */private boolean result;/** * 错误代码,正确时使用0 */private int errorCode;private String message;private Object data;public boolean isResult() {return result;}public void setResult(boolean result) {this.result = result;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public static JsonResult createFailureResult(String message) {return new JsonResult(false, message);}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public int getErrorCode() {return errorCode;}public void setErrorCode(ErrorCode errorCode) {this.errorCode = errorCode.getCode();}public enum ErrorCode {/**OK = 200*/NONE("", 200),/**您的登录状态已失效,请重新登录!= 401*/NOT_LOGIN("您的登录状态已失效,请重新登录!", 401),/**系统未查询到该数据=4041*/NOT_FIND_DATA("系统未查询到该数据",4041),/**对不起,安全验证失败=402*/        NOT_VALID("对不起,安全验证失败", 402),                /**可以自定义错误信息4021(如删除用户,如果该用户是管理员,可以提是管理员不能被删除)***/        CURRENT_NOT_PERMISS_OPERATE("当前状态下不容许该操作", 4021),                /**数据格式不符合要求,请重新提交! 400*/        DATA_VALID_FAILURE("数据格式不符合要求,请重新提交!", 400),                /**网络出错,请重新操作!=505*/JAVA_CODE_ERROR("网络出错,请重新操作!", 505),/**新增功能请下载最新版本*/        BUSSINESS_NOT_SUPPORTED("当前客户端版本过低,不支持该功能,请下载最新版本", 600),/**对不起,您没有执行该操作的权限=403*/PERMISS_DENIED("对不起,您没有执行该操作的权限", 403),/**对不起,您没有操作该数据的权限!=4032*/PERMISS_DATA_DENIED("对不起,您没有操作该数据的权限!", 4032),/**您还没有注册公司,无法执行该操作=4031*/NOT_COMPANY("您还没有注册公司,无法执行该操作", 4031),/**您当前无法参与报价=4032*/        NOT_ALLOW_QUOTATION("您当前无法参与报价", 4032),                COMPANY_INFO_UN_PERFECT("<b><u><font color='red'>企业注册信息不完整,请尽快补全:</font></u></b><br>1.请到 企业申请 中进行完善;<br>2.或者联系“企业管理员”进行完善。<br/>3.信息不完整不影响正常创建操作!", 4033);private String display;private int code;// 构造方法private ErrorCode(String display, int code) {this.display = display;this.code = code;}public int getCode() {return this.code;}public String getValue() {return name();}public static ErrorCode fromCode(int code) {ErrorCode[] states = ErrorCode.values();for (ErrorCode state : states) {if (state.getCode() == code) {return state;}}return null;}// 覆盖方法@Overridepublic String toString() {return this.display;}public String getDisplay() {return display;}}}



0 0
原创粉丝点击