解決SpringMVC報錯Can not deserialize instance of java.util.ArrayList out of START_OBJECT token問題

SpringMVC請求報錯Can not deserialize instance of java.util.ArrayList out of START_OBJECT token.

請求參數是json格式:

{
	"busiOrderNoList": ["ord1526358029166", "ord1526358060543"]
}

接收是POST 方法:


 @ApiOperation(tags = {Constants.API_RequiresNoPermission}, value = "查詢支付結果", notes = "### 查詢支付結果")
 @RequestMapping(value = "/findTradeInfoForBusiOrderId" ,method = RequestMethod.POST)
 public PayrollTradenoPay2CResult findTradeInfoForBusiOrderId((@RequestBody List<String> paramList)){
        return payrollTradenoService.findTradeInfoForBusiOrderId(paramList);
 }

這是明顯不行的.如果要接收List<String>,應該更改前端傳參.直接去掉大括號和參數名.如下

["ord1526358029166", "ord1526358060543"]

這樣就能轉換爲List<String>了.


這有一個文章可以參考:SpringMVC獲取前端傳來的json數據的4種方式:

我把它整理了一下:
1、以RequestParam接收
前端傳來的是json數據不多時:[id:id],可以直接用@RequestParam來獲取值


@Autowired
private AccomodationService accomodationService;

@RequestMapping(value = "/update")
@ResponseBody
public String updateAttr(@RequestParam ("id") int id) {
    int res=accomodationService.deleteData(id);
    return "success";
}
 


2、以實體類方式接收
前端傳來的是一個json對象時:{【id,name】},可以用實體類直接進行自動綁定

@Autowired
private AccomodationService accomodationService;

@RequestMapping(value = "/add")
@ResponseBody
public String addObj(@RequestBody Accomodation accomodation) {
       this.accomodationService.insert(accomodation);
       return "success";
}


3、以Map接收
前端傳來的是一個json對象時:{【id,name】},可以用Map來獲取

@Autowired
private AccomodationService accomodationService;

@RequestMapping(value = "/update")
@ResponseBody
public String updateAttr(@RequestBody Map<String, String> map) {
    if(map.containsKey("id"){
        Integer id = Integer.parseInt(map.get("id"));
    }
    if(map.containsKey("name"){
        String objname = map.get("name").toString();
    }
    // 操作 ...
    return "success";
}


4、以List接收
當前端傳來這樣一個json數組:[{id,name},{id,name},{id,name},...]時,用List<E>接收

@Autowired
private AccomodationService accomodationService;

@RequestMapping(value = "/update")
@ResponseBody
public String updateAttr(@RequestBody List<Accomodation> list) {
    for(Accomodation accomodation:list){
        System.out.println(accomodation.toString());
    }
    return "success";
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章