天天看點

【Spring_MVC】接收前端Map等集合,同時可以設定預設值null

今天在處理前端請求時遇到了一個處理請求參數的問題,前端将參數封裝到map集合中,cookie、header都封裝到map集合中,後端處理時需要判斷前端是否發送了這些參數,如果沒有需要設定預設值為空。

需要用到的注解為@RequestParam。具體的解釋為:

RequestParam來映射請求參數
 required表示是否必須,預設為true
 defaultValue請求參數的預設值
           

具體的例子為:

public String demo(@RequestParam(value="username")String user,@RequestParam(value = "age",required = false,defaultValue = "0") int age){
        System.out.println("testRequestParam,username:"+un+",age,"+age);
        return "success";
    }
           

以上比較簡單,就是将前端請求參數“username”指派給user形參,将前端參數“age”指派給age屬性,同時并不是必須,設定預設值為0.。以上都很好了解。

但是在使用map集合時這樣做就會出錯,爆出無法強轉錯誤。

正确的寫法應該是以下代碼:在RequestParam注解中不要寫value和defaultValue這兩個屬性,因為這樣會導緻将前端傳來的map集合當成String,然後指派給map屬性的值,這樣就會造成強轉異常。

@RequestMapping(value = "/check",method = RequestMethod.POST)
    @ResponseBody
    public Result byJsonMethodPost(
            @RequestParam("requestUrl") String requestUrl,
            @RequestParam("requestUrl2") String requestUrl2,
            @RequestParam(required = false) Map params1,
            @RequestParam(required = false) Map params2,
            @RequestParam(required = false) Map headers1,
            @RequestParam(required = false) Map headers2,
            @RequestParam(required = false) Map userCookies1,
            @RequestParam(required = false) Map userCookies2) {
        String response_body1 = responseApi.Post(requestUrl,  params1,headers1,userCookies1);
        String response_body2 = responseApi.Post(requestUrl2,params2,headers2,userCookies2);
        return resultByString(response_body1,response_body2);
    }
           

繼續閱讀