axios post/get请求 @RequestBody @RequestParam @SpringQueryMap对应的用法

今天在做react 前后端请求的时候,发现有个@RequestBody 不能获取map ,查阅了一下get/post请求,记录一下,方便查阅。

一、POST请求
1、 @RequestParam方式:

前端,需要用qs.stringify(data):

ceshi = ()=>{

      let data = {
        // "idd": "f6588b4d3a274d599c8696e3a2e89579",
        // "name":"水"
        idd: 'Fred',
        lastName: 'Flintstone'
      };
      // alert()
      axios.post(`${base}/t-stu/testWarpper`, 
        qs.stringify({
          idd: 'f6588b4d3a274d599c8696e3a2e89579',
          lastName: 'Flintstone'
        })
      )
      .then((response)=> {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      })
      .then(function () {
        // always executed
      });  
    }

后台@RequestParam 获取参数:

    @ResponseBody
    @RequestMapping(value="/testWarpper",method = RequestMethod.POST)
    public Map<String,Object> testWarpper(@RequestParam("idd") String sid){

        Map<String,Object> map = new HashMap<>();
        QueryWrapper<TStu> queryWrapper = new QueryWrapper<>();
        
//        queryWrapper.eq("stuid",paramMap.get("idd").toString());
        queryWrapper.eq("stuid",sid);
//        queryWrapper
        List<TStu>  list = tStuMapper.selectList(queryWrapper);

        map.put("result",list);
        return map;
    }

2、@RequestBody方式

前端代码:

ceshi = ()=>{

      let data = {
        // "idd": "f6588b4d3a274d599c8696e3a2e89579",
        // "name":"水"
        idd: 'f6588b4d3a274d599c8696e3a2e89579',
        lastName: 'Flintstone'
      };
      // alert()
      axios.post(`${base}/t-stu/testWarpper`, data
      )
      .then((response)=> {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      })
      .then(function () {
        // always executed
      });  
    }

后台代码:

   @ResponseBody
    @RequestMapping(value="/testWarpper",method = RequestMethod.POST)
    public Map<String,Object> testWarpper(@RequestBody(required = false) Map paramMap){

        Map<String,Object> map = new HashMap<>();
        QueryWrapper<TStu> queryWrapper = new QueryWrapper<>();

        queryWrapper.eq("stuid",paramMap.get("idd").toString());
//        queryWrapper.eq("stuid",sid);
//        queryWrapper
        List<TStu>  list = tStuMapper.selectList(queryWrapper);

        map.put("result",list);
        return map;
    }

二、GET请求的方式
1.@RequestParam方式
前端:

ceshi = ()=>{

      let data = {
        // "idd": "f6588b4d3a274d599c8696e3a2e89579",
        // "name":"水"
        idd: 'f6588b4d3a274d599c8696e3a2e89579',
        lastName: 'Flintstone'
      };
      // alert()
      axios.get(`${base}/t-stu/testWarpper`,{params:data}
      )
      .then((response)=> {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      })
      .then(function () {
        // always executed
      });  
    }

后台:

@ResponseBody
    @RequestMapping(value="/testWarpper",method = RequestMethod.GET)
    public Map<String,Object> testWarpper(@RequestParam("idd") String sid){

        Map<String,Object> map = new HashMap<>();
        QueryWrapper<TStu> queryWrapper = new QueryWrapper<>();

//        queryWrapper.eq("stuid",paramMap.get("idd").toString());
        queryWrapper.eq("stuid",sid);
//        queryWrapper
        List<TStu>  list = tStuMapper.selectList(queryWrapper);

        map.put("result",list);
        return map;
    }
}
postman中发送.png

2.@ModelAttribute方式,用于接收多个参数的dto实体
前端:(react 有做代理处理)


微信截图_20190828091723.png

后台:


微信图片_20190828092809.png

3.@SpringQueryMap 方式

 /**
     * 工单列表
     *
     * @param dto
     * @return Result<PageVO < WorkOrderVO>>
     */
    @GetMapping("/workOrder/list")
    @ApiOperation("工单列表")
    public Result<PageVO<WorkOrderVO>> queryList(@Valid @SpringQueryMap WorkOrderQueryDTO dto) {
        return Result.buildSuccess(ResultCode.SUCCESS, workOrderService.queryList(dto));
    }

postman测试


image.png

debug结果


image.png

总结:

测试了axios.get不能用@RequestBody获取,能用@RequestParam和@SpringQueryMap获取。axios.post 可以用@RequestBody获取且不需要qs.stringify序列化,直接传对象就可以了。post请求后台用@RequestParam()获取的时候,前端需要用qs.stringify序列化所传递的参数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容