您的当前位置:首页正文

SpringBoot 传入JSON对象参数

2024-11-27 来源:个人技术集锦

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对象。

显示全文