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