錯誤信息提示:前端
Failed to instantiate [java.util.List]: Specified class is an interface;java
錯誤信息意思:參數錯誤,參數封裝出了問題。ajax
緣由:spring
前端給後臺傳遞了一個list對象,原本覺得直接用list 能夠接收,可是運行方法報錯,參數錯誤。查詢錯誤問題,發現是前端傳遞的對象,後臺沒有set,get的實體接收。json
controller中參數List內封裝的不是基本數據類型,而是一個對象,springMVC源碼獲取前臺的參數是:request.getParameter(" ")來接收參數的,這樣的話,封裝參數時就出問題了。數組
解決辦法:服務器
第一種方法:mvc
將VO對象再進行封裝。app
import java.util.List; public class ConfigListForm { private List<Config> ConfigList; public List<<span style="font-family:Arial, Helvetica, sans-serif;">Config</span>> getConfigList() { return ConfigList; } public void setConfigList(List<Config> configList) { ConfigList = configList; } }
缺陷:工具
這種方式很差處理接收的數據。我想接受的數據是config對象的數組,可是接收的數據是:[{configName=111, configId=111},{configName=222, =222}],不能自動封裝到個人對象裏,沒有把configName,configId,封裝到Config對象中。
第二種方法:
能夠把數組序列化成Json字符串提交,後臺springmvc裏用@ RequestBody String 方式接收,而後把這個接收到的json串用json工具轉換爲數組,這樣就解決了springmvc不能綁定對象數組的問題了。
將對象數組用{"list":JSON.stringify(array)}綁定到後臺,後臺用@RequestBody String configs接收,接收的是json數據,而後用jackson把configs轉爲數組List<configs> configList。
<span style="font-family:'宋體', Arial, Helvetica, 'san-serif';">var configList= JSON.stringify([ {configName: "sgs-demo", configId: "1"}, {configName: "sgs-demo-1", configId: "2"} ]); $.ajax({ type: "post", url: "/config", data:</span><span style="font-family:SimSun;"><span style="font-size:14px;line-height:25.2px;background-color:rgb(250,250,250);">c</span><span style="font-size:14px;line-height:25.2px;background-color:rgb(250,250,250);">onfigs</span></span><span style="font-family:'宋體', Arial, Helvetica, 'san-serif';"> , contentType: "application/json; charset=utf-8", dataType: "json", success: function (response, ifo) { alert("success"); }, error: function () { alert("error"); } }) </span>
dataType:'json',//預期的服務器響應的數據類型。
contentType: "application/json; charset=utf-8",//發送數據到服務器時所使用的內容類型。默認是:"application/x-www-form-urlencoded"。
@RequestMapping(value = "/config", method = RequestMethod.POST) public void myDomain(HttpServletRequest request, @RequestBody String configs) throws Exception{ ObjectMapper objectMapper = new ObjectMapper(); JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, configs.class); List<configs> list = objectMapper.readValue(configs, javaType); System.out.println(""); }
第三種方法:spring3.2 直接支持泛型集合
spring 3.2 直接支持泛型集合,如List<Sample> Map<String, Sample>等集合泛型
具體步驟
1 要配置驅動註解<mvc:annotation-driven/> ,裏面註冊了會把json綁定到list的"Bean實例"。
2 前臺傳json數組,後臺直接@RequestBody List<Config> list接收就能夠。
(這種方法還沒測試過,只是在查這個問題的時候看到這種方式。)