一、接收Form表单数据

1.1、基本的接收方法

1、下面样例 Controller 接收 form-data 格式的 POST 数据:

package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@PostMapping("/hello")public String hello(@RequestParam("name") String name,@RequestParam("age") Integer age) {return "name:" + name + "\nage:" + age;}
}

2、下面是一个简单的测试样例:

1.2 参数没有传递的情况

1、如果没有传递参数 Controller 将会报错,这个同样有如下两种解决办法:

  • 使用 required = false 标注参数是非必须的。
  • 使用 defaultValue 给参数指定个默认值。
package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@PostMapping("/hello")public String hello(@RequestParam(name = "name", defaultValue = "xxx") String name,@RequestParam(name = "age", required = false) Integer age) {return "name:" + name + "\nage:" + age;}
}

2、下面是一个简单的测试样例:

1.3 使用 map 来接收参数

1、Controller 还可以直接使用 map 来接收所有的请求参数:

package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.Map;@RestController
public class HelloController {@PostMapping("/hello")public String hello(@RequestParam Map<String,Object> params) {return "name:" + params.get("name") + "\nage:" + params.get("age");}
}

2、下面是一个简单的测试样例:

1.4 接收一个数组

1、表单中有多个同名参数,Controller 这边可以定义一个数据进行接收:

package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.Map;@RestController
public class HelloController {@PostMapping("/hello")public String hello(@RequestParam("name") String[] names) {String result = "";for(String name:names){result += name + "\n";}return result;}
}

2、下面是一个简单的测试样例:

1.5 使用对象来接收参数

1、如果一个 post 请求的参数太多,我们构造一个对象来简化参数的接收方式:

package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@PostMapping("/hello")public String hello(User user) {return "name:" + user.getName() + "\nage:" + user.getAge();}
}

2、User 类的定义如下,到时可以直接将多个参数通过 gettersetter 方法注入到对象中去:

package com.example.demo;public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

3、下面是一个简单的测试样例:

4、如果传递的参数有前缀,且前缀与接收实体类的名称相同,那么参数也是可以正常传递的:

5、如果一个 get 请求的参数分属不同的对象,也可以使用多个对象来接收参数:

package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@PostMapping("/hello")public String hello(User user, Phone phone) {return "name:" + user.getName() + "\nage:" + user.getAge()+ "\nnumber:" + phone.getNumber();}
}

1.6、使用对象接收时指定参数前缀

1、如果传递的参数有前缀,且前缀与接收实体类的名称不同相,那么参数无法正常传递:

2、我们可以结合 @InitBinder 解决这个问题,通过参数预处理来指定使用的前缀为 u.

package com.example.demo;import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;@RestController
public class HelloController {@PostMapping("/hello")public String hello(@ModelAttribute("u") User user) {return "name:" + user.getName() + "\nage:" + user.getAge();}@InitBinder("u")private void initBinder(WebDataBinder binder) {binder.setFieldDefaultPrefix("u.");}
}

3、重启程序再次发送请求,可以看到参数已经成功接收了:

二、 接收字符串文本数据

(1)如果传递过来的是 Text 文本,我们可以通过 HttpServletRequest 获取输入流从而读取文本内容。

package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;@RestController
public class HelloController {@PostMapping("/hello")public String hello(HttpServletRequest request) {ServletInputStream is = null;try {is = request.getInputStream();StringBuilder sb = new StringBuilder();byte[] buf = new byte[1024];int len = 0;while ((len = is.read(buf)) != -1) {sb.append(new String(buf, 0, len));}System.out.println(sb.toString());return "获取到的文本内容为:" + sb.toString();} catch (IOException e) {e.printStackTrace();} finally {try {if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();}}return null;}
}

(2)下面是一个简单的测试样例:

三、接收 JSON 数据

3.1 使用 Map 来接收数据

(1)如果把 json 作为参数传递,我们可以使用 @requestbody 接收参数,将数据转换 Map

package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import java.util.Map;@RestController
public class HelloController {@PostMapping("/hello")public String hello(@RequestBody Map params) {return "name:" + params.get("name") + "\n age:" + params.get("age");}
}

(2)下面是一个简单的测试样例:

3.2 使用 Bean 对象来接收数据

(1)如果把 json 作为参数传递,我们可以使用 @requestbody 接收参数,将数据直接转换成对象:

package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@PostMapping("/hello")public String hello(@RequestBody User user){return user.getName() + " " + user.getAge();}
}

(2)User 类定义如下:

package com.example.demo;public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

(3)下面是一个简单的测试样例:

(4)如果传递的 JOSN 数据是一个数组也是可以的,Controller 做如下修改:

package com.example.demo;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class HelloController {@PostMapping("/hello")public String hello(@RequestBody List<User> users){String result = "";for(User user:users){result += user.getName() + " " + user.getAge() + "\n";}return result;}
}

3.3  接收list<T>对象

1.请求方式 post json

[

{

"projectId":"1",

"projectIds":[2,3]

},

{

"projectId":"2",

"projectIds":[4,5]

}

]

2. @RequestBody List<PhoneStatisticalAnalysisReq> req

 @RequestMapping("/analysis")public JsonResult queryList (@RequestBody List<PhoneStatisticalAnalysisReq> req) {
....}

3. 结果

SpringBoot - Post请求-接收参数相关推荐

  1. 解决Springboot get请求是参数过长的情况

    解决Springboot get请求是参数过长的情况 问题原因 Springboot get请求是参数过长抛出异常:Request header is too large 的问题 错误描述 java. ...

  2. springBoot PUT请求接收不了参数的解决办法

    2019独角兽企业重金招聘Python工程师标准>>> 做项目的时候,想把接口写标准点,于是在更新内容的时候采用put提交内容,但是提交内容时总是获取不到参数,总是选择参数为null ...

  3. SpringBoot获取请求的参数

    说明 SpringBoot 为我们封装了许多,简便的获取请求参数的方法! 1.获取无注解获取请求参数 请求地址:http://192.168.0.115:8080/myproject/test/noA ...

  4. springboot 2.0中 PUT请求 接收不到参数解决办法

    在做RestTemplate调用,springboot2.0 swagger2接口时候,参数通过HandlerInterceptorAdapter 拦截后,在controller里面获取不到  解决办 ...

  5. SpringBoot用实体接收Get请求参数

    一.Controller层不带任何注解接收参数 第一种方法是最简单的,严重怀疑以前怎么没有用,谁知道呢..不过这次是真的管用了,最简单的方式就是Controller接口入参不加任何注解!!!Sprin ...

  6. SpringBoot自定义注解接收json参数

    SpringBoot如果接受json参数的话需要定义实体类然后使用@RequestBody注解,但是如果每个接口都创建一个实体类的话太麻烦,因此可以使用自定义注解的方法接收.从网上发现了这篇博客,解决 ...

  7. springboot调整请求头大小_【SpringBoot WebFlux 系列】 header 参数解析

    上一篇 weblfux 主要介绍了 path 参数的解析与映射关系,在我们进入 url 参数/post 表单之前,先看一下另外的一种参数--请求头中的参数如何处理 I. 项目环境 本项目借助Sprin ...

  8. 前端传递多个数组以及其他参数,springboot后台如何接收

    前端传递多个数组以及其他参数,springboot后台如何接收 前端传递参数ajax代码 var arr1=["1","2","3"];va ...

  9. SpringBoot实现前后端数据交互、json数据交互、Controller接收参数的几种常用方式...

    1.获取参数的集中常见注解 @PathVariable:一般我们使用URI template样式映射使用,即url/{param}这种形式,也就是一般我们使用的GET,DELETE,PUT方法会使用到 ...

最新文章

  1. 网络编程学习笔记(shutdown函数)
  2. leetcode算法题--猜数字大小 II★★
  3. 并发基础(十) 线程局部副本ThreadLocal之正解
  4. mysql b 树 b树_MySQL B树和B+树的区别
  5. ps里面怎么插入流程图_流程图很难画?学会这3个方法,5分钟能绘制出好看又高级的流程图...
  6. 客户端无法连接到远程计算机。可能没有启用远程连接
  7. Oracle 存储过程的创建,及触发器调用存储过程
  8. 【编程练习】八大排序算法
  9. PHP中获取CHECKBOX提交的内容及checkbox全选
  10. idea java 快捷键_图示Javahtml5开发中IDEA的一些常用默认快捷键
  11. 使用CName记录的好处(转)
  12. S3C2440裸机------异常与中断__按键中断程序示例
  13. 20165219 王彦博 实验五 网络编程与安全 实验报告
  14. OpenGL多重纹理使用与理解
  15. MyBatis知识汇总(第四篇)分页:LIMT(SQL方式),RowBounds(Java对象方式)
  16. Windows 7 Build 7068 下载泄露
  17. 首页大广告展示——淘淘商城(十六)
  18. 讯捷CAD编辑器一秒解决CAD制图怎么画直线
  19. 单核工作法图解_摆脱穷忙,加强自制力:《单核工作法图解》助你居家办公更专一...
  20. ubantu系统从命令行进入桌面

热门文章

  1. go web 和java web_Go语言的Web框架比较
  2. 从知乎页面的502说一说测试人员应该知道的HTTP协议状态码
  3. net start mysql服务名无效
  4. ARMv7 Virtualization
  5. 受得了多大的委屈,才做得了多大的事
  6. linux mkdir 创建文件夹/目录
  7. 企业收集客户数据属违规?区块链的隐私保护计算可以防止
  8. 具有多输入的RBF网络和ARMA时序分析联合电力负荷预测
  9. 游戏安全03:缓冲区溢出攻击简单解释
  10. Linuxvim 中批量添加注释