ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springboot处理请求参数的方式

2021-03-29 15:02:41  阅读:136  来源: 互联网

标签:springboot 方式 json 参数 注解 POST 请求


写这篇博文的原因是, 我发现, 在处理前端发送过来的数据的时候, 总是会遇到不同的请求参数情形, 对所有的参数处理情况无法良好运用, 所以, 需要总结会出现的各种情况, 以便下次使用时方便, 而不需要花费太多的时间去思考

 

1 集中常见的接收参数的方法:

 参见此篇文章

 上述文章列举出了常使用的集中接收参数的方法, 对于GET方式的请求基本都适用, 但是对于POST方式的请求有时不太适用, 原因详见 2

 

2 POST请求特殊点:

  HTTP协议约定POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式(不是指字符编码),由开发者自行决定。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。因此POST 提交数据方案, 包含了 Content-Type 以声明消息主体编码方式

 

  主要有四种方式:

  (1)application/x-www-form-urlencoded
    最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
    此方式的编码方式:首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码,

    这种post提交方式, 会适用于上述几种获取参数的方式, 包括适用RequestParam注解, 比较符合正常的获取请求中的参数

  (2)multipart/form-data
    使用表单上传文件时,必须让 <form> 表单的 enctype 等于 multipart/form-data。 Content-Type 里指明了数据是以 multipart/form-data 来编码,上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段标准中原生 <form> 表单也只支持这两种方式(通过 <form> 元素的 enctype 属性指定,默认为 application/x-www-form-urlencoded。其实 enctype 还支持 text/plain,不过用得非常少)。

    这种post方式是用于文件上传, 不作为此篇讨论的范畴, 详细参见 文件上传 

 

     (3) application/json

     使用application/json这个Content-Type作为响应头, 用来告诉服务端消息主体是序列化的json字符串, 这种方案, 可以方便的提交复杂的结构化数据, 特别适合Restful的接口

     这种post提交方式也是比较常见, 不过, 后端接收参数的话, 就会有很大的不同之处

     上述的几种获取请求参数的方式就不再适用了, 不过还好, 有其它相应的解决办法

     springboot提供了一种用于转化原生post请求参数的注解, ----> RequestBody()

     这个注解会将请求中的json格式的参数转换为相应的实体类或者封装到Map对象中, 两者都比较常用

     @RequestBody Map<String, String> map, 这种方式会将json中的参数按照键值对的方式封装到map中, 我们可以直接通过map.get("参数名")的方式获取到参数值,

     @RequestBody Bean bean, 这种方式会将json中的参数封装到我们自定义的Bean中, 但是需要自定义Bean的属性名与参数名保持相同, 要是不同的话可能会报错或者无法接收到数据

     

     另外, 还有一种最原始的解决方案, 就是通过HttpServletRequest类直接获取到其中的参数, 不过这好像会牵扯到流的问题, 需要使用json的转化工具, 暂不详述

 

   (4) text/xml

     这个鬼东西好像没有遇见过, 暂时不讨论, 以后用到在总结

 

 

3 几种特殊的接收请求参数的方式适用范围总结:

   (1) RequestParam()注解: ---> GET请求, 普通表单格式提交的post请求(见2中的(1))

      被注解的参数, 可以是普通数据类型, 也可以是自定义Bean数据类型, 也可以是数组数据类型, 也可以是Map数据类型 (这四种数据类型适用性都非常高)

   (2) PathVarible()注解: ---> GET请求, POST请求, 但是要求参数写在url中, 而且需要被{...}包围, /user/{id}/{username}

   (3) RequestBody()注解: ---> POST请求, 主要是为了处理json格式的参数

      被注解的类型可以是自定义Bean, 也可以是Map数据类型 , 也可以是数组数据类型 (如果json格式数据中包含数组的话)(这三种的适用性 都非常高)

 

   (4) 无需注解, 直接函数中接收参数, 这种方式局限性较高, 需要参数名与请求参数名完全对应才行, 也没有办法处理json格式的参数数据

 

 

参见: 

  https://blog.csdn.net/TheGreatButton/article/details/107717595

  https://blog.csdn.net/yalishadaa/article/details/68937141

 

标签:springboot,方式,json,参数,注解,POST,请求
来源: https://www.cnblogs.com/longxingzhe/p/14592338.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有