今天在處理前端請求時遇到了一個處理請求參數的問題,前端将參數封裝到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);
}