postman的使用(传入不同参数,不同参数个数,不同请求方式)&报错non null key required解决&postman发送put请求

!!!访问时请求网址注意匹配配置文件中的IP和端口

1.只传入一个参数时

//获取商品信息
    @RequestMapping(value = "/v/queryGoodsId",method = RequestMethod.POST)
    public ReturnResult queryGoodsById(String id) throws Exception {
        return localGoodsService.queryGoodsById(id);
    }

2.登录:传入2个参数,post。

注意:idea中方法的参数名和数据库中的可以不一样。(我这里写的一样)

/**
     * 用户登录的方法
     * @param phone
     * @param password
     * @param response
     * @return map key:token value:token字符串
     * @throws Exception
     */
    @RequestMapping(value = "/doLogin",method = RequestMethod.POST)
    public ReturnResult doLogin(String phone, String password, HttpServletResponse response)throws Exception{
        return localUserService.validateToken(phone,password);
    }

3.先测试有了token,post请求方式下再传token和id的情况

	//抢购商品的方法
    //之前方式写成了get,还按照post的方法去传参,没有拼接问号,导致token和goodsId报错为null。
    @RequestMapping(value = "/v/getGoods",method = RequestMethod.POST)
    public ReturnResult getGoods(String token,String goodsId) throws Exception {
        return localGoodsService.getGoods(token,goodsId);
    }


4.get方式传参,2个参数,带token

首先,同第三种情况的图一,要先拿到token,才能做这里的拼接哦。

@RequestMapping(value = "/v/getGoods",method = RequestMethod.GET)
    public ReturnResult getGoods(String token,String goodsId) throws Exception {
        return localGoodsService.getGoods(token,goodsId);
    }


GET请求还可以不拼接:
点击Params,输入参数及value,可输入多个,即时显示在URL链接上。

5.传参的时候放到了headers头部里面(或者headers忘记传参),会导致报错non null key required(需要非空的键)



正确的处理应该放在body

6.传入的参数为json对象时

 	@RequestMapping(value = "/add",method = RequestMethod.POST,produces = "application/json")
    @ResponseBody
    public Dto add(@RequestBody AddBlogCommentVo vo){
    
    }

7.头部信息请求时

8.注销时,根据HttpServletRequest request需要在头部传token

 //HttpServletRequest request这个参数用来获取token (对应网页Network-XHR-Headers-Request-token)
    @RequestMapping(value = "/logout", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public Dto logout(HttpServletRequest request){
        //验证token
        String token = request.getHeader("token");
        if (!tokenService.validate(request.getHeader("user-agent"),token)){
            return DtoUtil.returnFail("token无效", ErrorCode.AUTH_TOKEN_INVALID);
        }else {
            try {
                tokenService.delete(token);
                return DtoUtil.returnDataSuccess("注销成功啦");
            }catch (Exception e){
                e.printStackTrace();
                return DtoUtil.returnFail("注销失败",ErrorCode.AUTH_UNKNOWN);
            }
        }
    }

9.put方式传参

    @RequestMapping(value = "/validatephone", method = RequestMethod.PUT, produces = "application/json")
    @ResponseBody
    public Dto validatephone(@RequestParam("user") String userCode,
                             @RequestParam("code") String code) {
        try {
            if (localItripUserService.validatePhone(userCode, code)) {
                return DtoUtil.returnSuccess("验证成功");
            } else {
                return DtoUtil.returnSuccess("验证失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return DtoUtil.returnFail(e.getMessage(), ErrorCode.AUTH_UNKNOWN);
        }
    }

10.Headers和body同时传参的情况

    @RequestMapping(value = "/queryuserlinkuser", method = RequestMethod.POST, produces = "application/json")
    @ResponseBody
    public Dto<ItripUserLinkUser> queryuserlinkuser(@RequestBody ItripSearchUserLinkUserVO vo, HttpServletRequest request) {
        List<ItripUserLinkUser> linkUserList = null;
        String token = request.getHeader("token");
        ......
    }

在登录方法提前测出token

11.get方式+头部Headers传参

注意:当接口传参中出现HttpServletRequest request时,在postman测试时要,要在头部Headers里面传参

@RequestMapping(value = "/deluserlinkuser", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public Dto deluserlinkuser(@RequestParam("ids") Long[] ids, HttpServletRequest request) {
        String token = request.getHeader("token");
     ......
     }

12.不需要传任何参数,输入网址直接请求的情况

@RequestMapping(value = "/queryhotelfeature", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public Dto<ItripLabelDicVo> queryhotelfeature() {
        List<ItripLabelDic> itripLabelDics = null;
        List<ItripLabelDicVo> itripLabelDicVos = null;
        try {
            Map param = new HashMap();
            param.put("parentId", 16);
            itripLabelDics = itripLabelDicService.getListByMap(param);
            if (EmptyUtils.isNotEmpty(itripLabelDics)) {
                itripLabelDicVos = new ArrayList<>();
                for (ItripLabelDic dic : itripLabelDics) {
                    ItripLabelDicVo dicVo = new ItripLabelDicVo();
                    BeanUtils.copyProperties(dic, dicVo);
                    itripLabelDicVos.add(dicVo);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return DtoUtil.returnFail("系统异常,获取失败", "10205");
        }
        return DtoUtil.returnSuccess("true", itripLabelDicVos);
    }

13.restful风格传参,直接在网址后面带数据。

和get方式请求传参基本一致,get方式传参可以在网址后面直接拼接?和数据内容,也可以把参数写在Params中。

14.传入的参数为数组

@RequestMapping(value = "/deluserlinkuser", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public Dto deluserlinkuser(@RequestParam("ids") Long[] ids, HttpServletRequest request) {
        String token = request.getHeader("token");
        try {
            if (EmptyUtils.isEmpty(redisAPI.exist(token))) {
                return DtoUtil.returnFail("token失效,请重登录", "100000");
            } else {
                if (ids.length == 1) {
                    if (EmptyUtils.isNotEmpty(itripOrderLinkUserService.getListByLinkedUserId(ids[0]))) {
                        return DtoUtil.returnFail("所选的常用联系人中有与某条待支付的订单关联的项,无法删除", "100431");
                    }else {
                        itripUserLinkUserService.removeById(ids[0]);
                        return DtoUtil.returnSuccess("true:删除成功");
                    }
                }else if (ids.length>1){
                    for (Long id : ids) {
                        if (EmptyUtils.isNotEmpty(itripOrderLinkUserService.getListByLinkedUserId(id))){
                            return DtoUtil.returnFail("所选的常用联系人中有与某条待支付的订单关联的项,无法删除", "100431");
                        }else {
                            itripUserLinkUserService.removeById(id);
                            return DtoUtil.returnSuccess("true:删除成功");
                        }
                    }
                }else {
                    return DtoUtil.returnFail("删除常用联系人失败","100432");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return DtoUtil.returnFail("请选择要删除的常用联系人","100433");
        }
        return DtoUtil.returnFail("系统异常","false");
    }

15.上传文件:此处以上传图片为例

key是可以选择类型的,有text(文本)和File(文件)2种。

@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = "application/json")
    @ResponseBody
    public Dto upload(@RequestParam MultipartFile file, HttpServletRequest request) {}

16.删除图片

@RequestMapping(value = "/delpic",method = RequestMethod.POST,produces = "application/json")
    @ResponseBody
    public Dto delpic(String imgName, HttpServletRequest request){}

17.传入的参数为整个json对象(包含请求头和请求体)

直接整体在body – raw 下面的JSON格式下传,然后send就可

18.【Body】介绍

【Body】
none:无请求主体

form-data:mutipart/form-data是网页表单用来传输数据的默认格式。可以模拟填写表单,并且提交表单。
可以上传一个文件作为key的value提交(如上传文件)。但该文件不会作为历史保存,只能在每次需要发送请求的时候,重新添加文件。

urlencoded:该模式和表单模式容易混淆,urlencoded不能上传文件,key-value会写入URL,而form-data模式的key-value不明显写入URL,而是直接提交。

raw: 可以包含任何东西,所有填写的text都会随着请求发送。
binary:image、audio 、video等二进制文件,注意不能保存历史,需要每次选择文件,然后提交。

【Pre-request Script】
请求发送前,需要执行的操作,常用于修改环境变量、设置全局变量等。

【test】
提供了很多检查、判断方法,用于测试接口是否可用,响应头中会生成一个测试报告,给出test检测的功能,是否可用。

(【Body】部分介绍参考:https://www.jianshu.com/p/4d77d39d6cf9)

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值