SpringBoot 傳入JSON對象參數


1.請求參數格式必須是正確的JSON。

2.在入參中使用注解@RequestBody,用於接收JSON參數,使其自動轉對象

3.關於lombok在此產生的一點小坑,@Builder對@RequestBody的影響

4.標識請求參數的格式為JSON--->> @PostMapping(value="/Test",produces = "application/json;charset=UTF-8")

1.后端代碼

@RestController
@RequestMapping("/Test")
public class TestController {
    
    @PostMapping(value="/Test",produces = "application/json;charset=UTF-8")
    public ContentSet Test(@RequestBody CommandInfo commandInfo){
 
        System.out.println(commandInfo);
        return null;
    }
}

2.實體類代碼

@Getter @Setter @ToString public class CommandInfo  implements Serializable { private int XXX; private int ZZZ; private Map<String,String> ,mapPamater;  }

3.PostMan模擬請求

方法二:

    @RequestMapping(value = "/addStockInAndDetails", method = RequestMethod.POST, produces = "text/html;charset=UTF-8") @ResponseBody @ApiOperation(value = "add in stock and details", notes = "商品入庫") @ApiResponse(response= String.class, code = 200, message = "接口返回對象參數") public String addStockInAndDetails(@RequestBody StockInDetails details) { System.out.println("-----------------"+details); try { if(details==null) { return "parameterError"; } StockIn stockIn = new StockIn(details.getInCode(), details.getSupplyId(), details.getInStatus(), details.getInTime()); stockInService.insert(stockIn); if(stockIn.getInId()>0) { for (StockInDetail detail : details.getDetails()) { detail.setInId(stockIn.getInId()); stockInDetailService.insert(detail); } } return "success"; } catch (Exception e) { e.printStackTrace(); return "fail"; } }

 對於第二種方法,前端ajax使用情況:

  //添加商品
    $("#btnSave").click(function(){ var addInCode = $("#addInCode").val(); var AddSupply = $("#AddSupply").val(); var  date = new Date(); var createTime = dateFormat("YYYY-mm-dd HH:MM:SS", date); if(addInCode == ""){ alert("入庫單號不能為空"); return ; } var details = $("#stockInDetailTab").bootstrapTable('getData'); var paramData = { "details": details, "inCode": addInCode, "inStatus": "0", "inTime": createTime, "supplyId": AddSupply }; var addUrl = baseUrl + "/Inventory/repair/StockIn/addStockInAndDetails"; $.ajax({ type: 'POST', url: addUrl, dataType: 'json', cache: false, headers : { 'Content-Type' : 'application/json;charset=utf-8' }, data: JSON.stringify(paramData), success: function (data) { if(data == "success"){ $('#addModal').modal('hide'); InitTable(url); }else{ alert("添加失敗"); } }, error: function(er){ if(er.responseText == "success"){ $('#addModal').modal('hide'); InitTable(url); }else{ alert("添加失敗"); } } }); });

原因:

@RequestParam 底層是通過request.getParameter方式獲得參數的,也就是說,@RequestParam 和request.getParameter是同一回事。

因為使用request.getParameter()方式獲取參數,可以處理get 方式中queryString的值,也可以處理post方式中 body data的值,所以,@RequestParam可以處理get 方式中queryString的值,也可以處理post方式中 body data的值。

@RequestParam用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容,提交方式GET、POST。

@RequestBody接受的是一個json對象的字符串,而不是Json對象,在ajax請求時往往都是Json對象,用JSON.stringify(data)的方式就能將對象變成json字符串。

@RequestBody接收的是一個字符串,返回的參數可以是一個Map對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM