千家信息网

如何解析Post请求参数

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这期内容当中小编将会给大家带来有关如何解析Post请求参数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。作为一个常年提供各种Http接口的后端而言,如何获取请求参数
千家信息网最后更新 2026年11月01日如何解析Post请求参数

这期内容当中小编将会给大家带来有关如何解析Post请求参数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

作为一个常年提供各种Http接口的后端而言,如何获取请求参数可以说是一项基本技能了,本篇为《190824-SpringBoot系列教程web篇之Get请求参数解析姿势汇总》之后的第二篇,对于POST请求方式下,又可以怎样获取请求参数呢

本篇主要内容包括以下几种姿势

  • @RequestBody json格式

  • RequestEntity

  • MultipartFile 文件上传

I. 环境搭建

首先得搭建一个web应用才有可能继续后续的测试,借助SpringBoot搭建一个web应用属于比较简单的活;

创建一个maven项目,pom文件如下

    org.springframework.boot    spring-boot-starter-parent    2.1.7         UTF-8    UTF-8    Finchley.RELEASE    1.8            org.springframework.boot        spring-boot-starter-web                                            org.springframework.boot                spring-boot-maven-plugin                                    spring-milestones        Spring Milestones        https://repo.spring.io/milestone                    false            

添加项目启动类Application.cass

@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class);    }}

在演示请求参数的解析实例中,我们使用终端的curl命令来发起http请求(主要原因是截图上传太麻烦,还是终端的文本输出比较方便;缺点是不太直观)

II. POST请求参数解析

接下来我们正式进入参数解析的妖娆姿势篇,会介绍一下常见的一些case(并不能说包含了所有的使用case)

下面所有的方法都放在 ParamPostRest 这个Controller中

@RestController@RequestMapping(path = "post")public class ParamPostRest {}

在正式介绍之前,强烈推荐看一下《190824-SpringBoot系列教程web篇之Get请求参数解析姿势汇总》, 因为get传参的姿势,在post参数解析中同样适用,下面的内容并不会再次详细介绍

1. HttpServletRequest

首先看一下最基本的使用case,和get请求里的case一样,我们先开一个接口

@PostMapping(path = "req")public String requestParam(HttpServletRequest req) {    return JSONObject.toJSONString(req.getParameterMap());}

我们测试下两种post请求下,会出现怎样的结果

# 常规的表单提交方式# content-type: application/x-www-form-urlencoded➜  ~ curl 'http://127.0.0.1:8080/post/req' -X POST -d 'name=yihui&age=18'{"name":["yihui"],"age":["18"]}% # json传提交➜  ~ curl 'http://127.0.0.1:8080/post/req' -X POST -H 'content-type:application/json;charset:UTF-8' -d '{"name": "yihui", "age": 20}'{}%

从上面的case中可以知道,通过传统的表达方式提交的数据时,获取参数和get获取参数使用姿势一样;然而当然传入的是json串格式的数据时,直接通过javax.servlet.ServletRequest#getParameter获取不到对应的参数

我们通过debug,来看一下在传json串数据的时候,如果我们要获取数据,可以怎么做

上面截图演示了我们从请求的InputStream中获取post参数;所以再实际使用的时候需要注意,流中的数据只能读一次,读完了就没了; 这个和我们使用GET传参是有很大的差别的

注意:如果您有一个打印请求参数日志的切面,在获取post传的参数时需要注意,是不是把流的数据读了,导致业务中无法获取到正确的数据!!!

2. RequestBody

上面说到传json串数据时,后端直接通过HttpServletRequest获取数据不太方便,那么有更优雅的使用姿势么?下面我们看一下@RequestBody注解的使用

@Datapublic class BaseReqDO implements Serializable {    private static final long serialVersionUID = 8706843673978981262L;    private String name;    private Integer age;    private List uIds;}@PostMapping(path = "body")public String bodyParam(@RequestBody BaseReqDO req) {    return req == null ? "null" : req.toString();}

只需要在参数中添加@RequestBody注解即可,然后这个接口就支持json串的POST提交了

# json串数据提交➜  ~ curl 'http://127.0.0.1:8080/post/body' -X POST -H 'content-type:application/json;charset:UTF-8' -d '{"name": "yihui", "age": 20}'BaseReqDO(name=yihui, age=20, uIds=null)%# 表单数据提交➜  ~ curl 'http://127.0.0.1:8080/post/body' -X POST -d 'name=yihui&age=20'{"timestamp":1566987651551,"status":415,"error":"Unsupported Media Type","message":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported","path":"/post/body"}%

说明:使用@RequestBody注解之后,可解析提交的json串;但不再支持表单提交参数方式(application/x-www-form-urlencoded)

3. RequestEntity

使用RequestEntity来解析参数,可能并不太常见,它用来解析json串提交的参数也比较合适,使用姿势也比较简单

@PostMapping(path = "entity")public String entityParam(RequestEntity requestEntity) {    return Objects.requireNonNull(requestEntity.getBody()).toString();}

使用case如下

# json串数据提交➜  ~ curl 'http://127.0.0.1:8080/post/entity' -X POST -H 'content-type:application/json;charset:UTF-8' -d '{"name": "yihui", "age": 20}'{name=yihui, age=20}%# 表单数据提交不行➜  ~ curl 'http://127.0.0.1:8080/post/entity' -X POST -d 'name=yihui&age=19'{"timestamp":1566988137298,"status":415,"error":"Unsupported Media Type","message":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported","path":"/post/entity"}%

4. MultipartFile 文件上传

文件上传也是一个比较常见的,支持起来也比较简单,有两种方式,一个是使用MultipartHttpServletRequest参数来获取上传的文件;一个是借助 @RequestParam注解

private String getMsg(MultipartFile file) {    String ans = null;    try {        ans = file.getName() + " = " + new String(file.getBytes(), "UTF-8");    } catch (IOException e) {        e.printStackTrace();        return e.getMessage();    }    System.out.println(ans);    return ans;}/** * 文件上传 * * curl 'http://127.0.0.1:8080/post/file' -X POST -F 'file=@hello.txt' * * @param file * @return */@PostMapping(path = "file")public String fileParam(@RequestParam("file") MultipartFile file) {    return getMsg(file);}@PostMapping(path = "file2")public String fileParam2(MultipartHttpServletRequest request) {    MultipartFile file = request.getFile("file");    return getMsg(file);}

测试case如下

# 创建一个文本文件➜  ~ vim hello.txthello, this is yhh's spring test!# 使用curl -F 实现文件上传,注意使用姿势➜  ~ curl 'http://127.0.0.1:8080/post/file' -F 'file=@hello.txt'file = hello, this is yhh's spring test!➜  ~ curl 'http://127.0.0.1:8080/post/file2' -F 'file=@hello.txt'file = hello, this is yhh's spring test!

5. 其他

上面介绍的几种有别于GET篇中的请求姿势,请注意GET请求参数的解析方式,在POST请求中,可能也是适用的,为什么说可能?因为在post请求中,不同的content-type,对参数的解析影响还是有的;

需要注意的是,对于传统的表单提交(application/x-www-form-urlencoded)方式,post的参数解析依然可以使用

上述就是小编为大家分享的如何解析Post请求参数了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

参数 数据 姿势 文件 方式 表单 内容 注解 接口 UTF-8 支持 测试 传统 常见 截图 教程 文本 时候 格式 终端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 互联网科技资迅 互联网络科技有限公司 苏州互联网科技贷款公司 互联网科技类展会 镁科技互联网资讯平台 互联网科技创新企业排名 恒生科技互联网指数分析 湖南洣水互联网科技有限公司扣款 互联网金融科技公司干啥的 移动互联网科技公司 知域互联网科技有限公司大骗子 互联网科技大奖都有哪些公司 互联网在线教育科技创业 互联网金融科技公司的优势 雨阳互联网卡科技有限公司 启辰互联网科技 皮皮虾互联网科技有限公司 陕西九四连强互联网科技有限公司 中国主要互联网科技公司 互联网最新的科技 疫情对互联网科技公司影响 奇酷互联网络科技公司 创业天下互联网科技有限公司 河南住房之家互联网科技 深圳艾果互联网通讯科技 互联网科技实习生岗位 张召忠谈中国互联网科技 互联网相关科技技术 唐山双旺合互联网科技产业园
0