美文网首页
故障排查:前端使用PUT方法传递List参数

故障排查:前端使用PUT方法传递List参数

作者: Leon_0568 | 来源:发表于2019-12-03 11:58 被阅读0次

    最近在处理一个批量更新接口的时候遇到了一个问题,在此记录一下解决过程。

    先说一下背景,该项目是一个审批系统,需要完成一个批量更新的功能。

    后台指定了一个PUT类型的接口,需要传入一个字符串数组IdList、字符串1、字符串2,完成批量更新。

    API的代码如下:

    第一次调试的时候使用以下方法调用API,发现不会到达断点:

    //put

    export function putAction(url, parameter) {

      return axios({

        url: url,

        method: 'put',

        params: parameter

      })

    }

    开启开发者模式,状态码200,说明客户端请求成功了,于是开始排查服务端的问题

    使用postman工具调用接口,服务端日志显示:

    翻译成中文意思就是:List没有默认的构造器,告诉我们需要给List参数加一个@RequestParam(value=""),注解的使用方法就不细说了。这个注解提供一个方法,如果传入的数据格式是:"1234,5678",即多个数据之间使用逗号分隔开,在后台接口中可以使用数组或者list类型的变量来接收,反之如果声明了数组,但漏了RequestParam,程序就会认为我们违背了约定,当然单个字符串或者整形或者字符串都没有这方面问题。

    加入注解,传参调试,成功到达断点:

    最后延伸一下,之前传递数据使用的都是GET和POST方法,事实上你确实可以用POST做任何事,但是这个违反HTTP标准,属于“滥用”。PUT和DELETE则是RESTAPI的产物,相对比较规范化,对于PUT我们可以把参数写到URL中,也可以把参数写到Request body中。

    至于为什么PUT比POST规范和安全,为什么在修改数据的时候要使用PUT?

    因为PUT被定义为幂等的方法(调用多少次都不会产生不同副作用的http方法),POST则不是幂等的方法,也就是说:

    PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。(所以PUT用来改资源)

    Post请求:后一个请求不会把第一个请求覆盖掉。(所以Post用来增资源)

    相关文章

      网友评论

          本文标题:故障排查:前端使用PUT方法传递List参数

          本文链接:https://www.haomeiwen.com/subject/njxcgctx.html