1. 程式人生 > >spring/springboot傳遞陣列引數和物件引數,@RequestBody使用時踩過的小坑

spring/springboot傳遞陣列引數和物件引數,@RequestBody使用時踩過的小坑

其實也不叫坑了,是自己low造成的,以前傳遞引數簡單,都是用的 x-www-form-urlencoded,這次需要傳遞一個複雜一點的,傳遞的是一個實體類加上另一個實體類的list,引數就是(Object1 object1 ,List<Object2> object2s),當時就想到@requestBody可以傳遞物件引數,不過需要把 x-www-form-urlencoded改為application/json即可,OK,在兩個引數前面加上@RequestBody註解,即是(@RequestBodyObject1 object1 , @RequestBody List<Object2> object2s),前端傳遞的時候contentType改為application/json,大功告成?NONONO,json解析錯誤

原因:在我們的請求到達controller之前,也就是到達DispacherServlet中心處理器的時候,如果有@RequestBody會對引數進行一次解析,把json字串解析出物件,也就是說只解析一次,兩個@requestBody只能弄一個,物件的json是以“{”開頭,list的json是以“[”開頭 ,所以基本都是json解析出錯

解決辦法:

只搞一個@requestBody不就解決了嗎,把兩個引數封裝成一個

public class XXXParam {

    private Object1 object1;

    private List<Object2> object2s;

    //getter。。。  setter。。。


}

引數現在為(@RequestBody XXXParam param)    完工!!!