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

  • 相关阅读:
    命令模式
    单例模式
    装饰者模式
    监听者模式
    三角形三心和特点
    u3d中texture2D的Advanced设置解析
    c# 三种常见的委托
    c# float显示时保存一位小数
    Jakarta Java Mail属性参数配置
    SpringDataRedis的Keyspaces设置
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/11608491.html
Copyright © 2020-2023  润新知