Spring MVC 參數自動綁定List的解決方案

最近遇到一個問題,在項目中須要傳入一組對象。之前都只遇到過傳入一個對象、多個對象或者一組數組的狀況。不多遇到傳入一組對象的狀況。因此遇到這個問題的時候感受有點棘手。本覺得用這樣的方法就能解決的。前端

@RequestMapping("save1")
public void save1(Plan plan, List<PlanItem> planItems, HttpServletResponse response) {
    //TODO more...
    addMessage(response, MESSAGE_TYPE_SUCCESS, null, MESSAGE_SUCCESS);
}

可是後來發現本身太傻太天真。這樣的方式根本就綁定不了參數。有人說spring相較於struts追求了性能就一定要犧牲一部分東西。可是我對於spring和struts並無什麼研究,只是當一個工具再用而已。因此,我真的不知道爲何。扯遠了,回到正題上。網上還有其餘的解決方案。就是採用這種方式java

public class PersonList {  
       
    private List<Person> person;  
   
    public List<Person> getPerson() {  
        return person;  
    }  
   
    public void setPerson(List<Person> person) {  
        this.Person= person;  
    }  
   
}  
 
 
controller裏:
@RequestMapping(value = "xxx", method = RequestMethod.POST)
    public void test(PersonList person) {
        //遍歷person 
        }
}         
 
頁面要這樣寫:
<form id="form" action="test/test.do" method="post">
<input type="text" name="person[0].username" value="jobs"/>
<input type="text" name="person[0].age" value="55"/><br/>
<input type="text" name="person[1].username]" value="jim"/>
<input type="text" name="person[1].age" value="21"/><br/>
<input type="submit">
<form>

可是這種方法我試了,仍是不行。不曉得是我太蠢仍是爲何。spring

幾經周折找到了另一種解決方案。將list對象的json字符串傳入後臺。後臺接收到參數後。再將json轉爲對象。前端代碼就免了,後臺代碼以下。json

@RequestMapping("save")
public void save(Plan plan, String planItemJson, HttpServletResponse response) {
    List<PlanItem> parseArray = JSON.parseArray(planItemJson, PlanItem.class);
    //TODO what u want
    addMessage(response, MESSAGE_TYPE_SUCCESS, null, MESSAGE_SUCCESS);
}

可是這樣有一個小問題,就是json字符串,會被前段自動在key的地方加上雙引號。致使後臺解碼的時候,將雙引號轉義爲「&quot;」因此還須要將「&quot;」轉爲雙引號。即,最終代碼爲數組

@RequestMapping("save")
public void save(Plan plan, String planItemJson, HttpServletResponse response) {
    planItemJson = planItemJson.replaceAll("&quot;","\"");
    List<PlanItem> parseArray = JSON.parseArray(planItemJson, PlanItem.class);
    //TODO what u want
    addMessage(response, MESSAGE_TYPE_SUCCESS, null, MESSAGE_SUCCESS);
}

經測試,該方法對於list對象裏面再包含list對象也是同樣起做用的。app

PS:爲了提升程序健壯性,能夠在轉義JSON對象以後,對json進行校驗,這樣就避免了json轉java對象出錯的狀況。工具

或者採用更加暴力的方式,在json轉list的時候進行try catch操做。post

相關文章
相關標籤/搜索