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


錯誤信息提示:

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

錯誤信息意思:參數錯誤,參數封裝出了問題。

原因:

前端給后台傳遞了一個list對象,本來以為直接用list 可以接收,但是運行方法報錯,參數錯誤。查詢錯誤問題,發現是前端傳遞的對象,后台沒有set,get的實體接收。

controller中參數List內封裝的不是基本數據類型,而是一個對象,springMVC源碼獲取前台的參數是:request.getParameter(" ")來接收參數的,這樣的話,封裝參數時就出問題了。

解決辦法:

第一種方法:

將VO對象再進行封裝。

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"。

如果不加contentType,configs接收的數據為類似%7B%22id%22%3A243%2C%name%22%3A4%2C%22age%22%3A1048%2C%22格式,json轉換會報錯,

controller層

@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接收就可以。

(這種方法還沒測試過,只是在查這個問題的時候看到這種方式。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM