项目需要参照本人java ee系列前文建立,请读者自行前往本人主页查看。
当然,您自己创建一个项目也是可以的。

  • bean包下的Student.java
package com.example.demo.bean;
public class Student {private Integer id; //学号private String name; //姓名public Student() {}public Student(Integer id, String name) {this.id = id;this.name = name;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

无注解获取参数

◼ 直接把 HTTP 请求的参数写在后台方法的形参中,允许参数为空。
◼ HTTP 请求的参数值(字符串)将自动转换为方法形参的类型。
◼ 要求:方法的参数名称要和 HTTP 请求的参数名称保持一致。
◼ 适用于 GET 和 POST 请求方式。

后台代码:

@RestController
public class TestController {@RequestMapping("/test1")public Student test1(Integer id, String name) {Student s=new Student();s.setId(id);s.setName(name);return s;}
}

前端代码:

<body><p th:inline = "none" >hello, [[${msg}]]</p><p th:inline = "none" >hello, [(${msg})]</p>
</body>

用postman尝试:
前端请求:http://localhost:8080/test1?id=2019001&name=小明

参数是 key=value 形式
value 默认都是字符串类型

参数和请求之间用?连接
参数之间用&连接


为空值的情况:


使用HttpServletRequest对象

◼ 方法的参数中添加 HttpServletRequest 对象。
◼ 通过该对象 getParameter(“xxx”) 获取请求的 “xxx” 参数值(字符串值)。
◼ 适用于 GET 和 POST 请求方式。

后台代码:

@RequestMapping("/test2")public Student test2( HttpServletRequest request ) {Integer id = Integer.parseInt( request.getParameter("id") ); String name = request.getParameter("name");Student s=new Student(id,name);return s;}

postman测试:


使用实体类封装 ★

◼ 直接使用实体类做为控制器参数,Spring Boot会自动创建这个类的对象,并用 HTTP 参数装配它。
◼ 要求:实体类属性名称要和 HTTP 请求的参数名称保持一致。
◼ 适用于 GET 和 POST 请求方式。

后台代码:

@RequestMapping("/test3")public Student test3( Student s ) {return s;}

要求:实体类属性名称要和 HTTP 请求的参数名称保持一致

postman测试:
一般情况:

多的参数不接收:

为空:

名称不一致:


使用 @RequestParam 获取参数

◼ 在无注解的情况下,要求 HTTP 参数名与控制器参数名称保持一致,然
而现在在前后台分离的趋势下,前端的命名规则可能与后端的不一样。
◼ 使用 @RequestParam 注解来确定前后端参数名称的映射关系。
◼ 适用于 GET 和 POST 请求方式。
◼ @RequestParam 有三个配置参数:
◼ value 为接收 HTTP 请求的参数名。
◼ required 表示是否必须,默认为 true,表示参数必填。
◼ defaultValue 可设置请求参数的默认值。

后台代码:

@RequestMapping("/test4")public Student test4( @RequestParam(value="stu_id") Integer id,@RequestParam(value="stu_name") String name) {Student s=new Student();s.setId(id);s.setName(name);return s;}

postman测试:


报错:stu_name参数默认必填

添加默认值

@RequestMapping("/test4")public Student test4(@RequestParam(value="stu_id", required = true, defaultValue = "2019000") Integer id,@RequestParam(value="stu_name", required = false) String name) {Student s=new Student();s.setId(id);s.setName(name);return s;}

postman测试:

全为空:


使用 @PathVariable 获取参数

◼ REST风格请求,例如:http://localhost:8080/test4/2019001/小明(数据直接放在请求路径上,并用"/“连接)
◼ 后台请求映射:
@RequestMapping(”/test4/{id}/{name}")
◼ 参数绑定:
@PathVariable(“xxx”) 将占位符参数"xxx"绑定到控制器方法的形参中。
◼ 注意:
(1)路径上必须有参数(required=true),且不能设置默认值。
(2)适用于 GET 和 POST 请求方式。

后台代码:

@RequestMapping("/test5/{id}/{name}")public Student test5( @PathVariable("id") Integer id,//这里有两种写法@PathVariable(value = "name") String name) {Student s=new Student();s.setId(id);s.setName(name);return s;}

前端请求:(这次不用postman测试了,用也可以,都一样)

错误的前端请求:


@PathVariable与@RequestParam的区别


使用 @RequestBody 获取参数

◼ @RequestBody 主要用来接收前端传递的 json 数据。
◼ 注意:
(1)使用 @RequestBody 接收数据时,前端必须 POST 方式提交;
(2)且必须与 contentType = “application/json” 配合使用。

不设置时使用的是默认值:application/x-www-form-urlencoded

后台代码

@PostMapping("/test6")public Student test6(@RequestBody Student s) {return s;}

postman测试:

前端传递对象数组

后台代码

@PostMapping("/test6")public List<Student> test6(@RequestBody List<Student> list) {Iterator it = list.iterator();while (it.hasNext()){Student s=(Student)it.next();System.out.println(s.getId()+":"+s.getName());}return list;}

postman测试:


控制器代码完整版:

  • TestController.java
package com.example.demo.controller;import com.example.demo.bean.Student;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.util.*;@RestController
@ServletComponentScan
public class TestController {@RequestMapping("/test1")public Student test1(Integer id, String name) {Student s=new Student();s.setId(id);s.setName(name);return s;}@RequestMapping("/test2")public Student test2( HttpServletRequest request ) {Integer id = Integer.parseInt( request.getParameter("id") ); // 转换一下(没有判断空串或null)String name = request.getParameter("name");Student s=new Student(id,name);return s;}@RequestMapping("/test3")public Student test3( Student s ) {return s;}@RequestMapping("/test4")public Student test4(@RequestParam(value="stu_id", required = true, defaultValue = "2019000") Integer id,@RequestParam(value="stu_name", required = false) String name) {Student s=new Student();s.setId(id);s.setName(name);return s;}@RequestMapping("/test5/{id}/{name}")public Student test5( @PathVariable("id") Integer id,//这里有两种写法@PathVariable(value = "name") String name) {Student s=new Student();s.setId(id);s.setName(name);return s;}@PostMapping("/test6")public List<Student> test6(@RequestBody List<Student> list) {Iterator it = list.iterator();while (it.hasNext()){Student s=(Student)it.next();System.out.println(s.getId()+":"+s.getName());}return list;}}

[JAVA EE]Spring Boot 控制层:参数传递方法相关推荐

  1. Spring MVC控制层的返回类型--String类型与Bean类型

    SpringMVC控制层的返回类型形式多样,现拿其中的两种--String类型与Bean类型作以说明. 一.测试项目的结构 说明:(jsp的名字没起好) 控制层:UserController.java ...

  2. 精选10个用于Java开发Spring Boot的Eclipse插件

    前言 作为从事Java多年的程序员,在此分享用于 Java 和 Spring Boot 开发的 10 大 Eclipse插件: 1. EGit - Eclipse 的 Git 集成 这可能是当今 Ja ...

  3. 转:Spring Boot 获取 HttpServletRequest 的方法

    转自: Spring Boot 获取 HttpServletRequest 的方法 - 简书本文介绍 Spring Boot 2 获取 HttpServletRequest 的方法. 目录 概述 方法 ...

  4. Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获

    Spring boot异常统一处理方法:@ControllerAdvice注解的使用.全局异常捕获.自定义异常捕获 参考文章: (1)Spring boot异常统一处理方法:@ControllerAd ...

  5. Spring Boot 启动执行某个方法的三种实现方式

    Spring Boot 启动执行某个方法的三种实现方式 Spring Boot 启动执行某个方法的三种实现方式 第一种方式 @PostConstruct 注解解释 具体实现 第二种方式 Applica ...

  6. java中用spring boot连接oracle数据库

    java中用spring boot连接oracle数据库 代码下载链接 百度云:https://pan.baidu.com/s/1dU_z2pUS2NSfowI4_mJ4Ow 提取码:mmlm CSD ...

  7. java里不支持post请求_java – Spring Boot – 不支持请求方法’POST’

    我的Spring Boot应用程序中不支持异常PageNotFound:Request方法'POST'. 这是我的控制器: @RestController public class LoginCont ...

  8. Spring Boot 定义接口的方法是否可以声明为 private?

    我们在 Controller 中定义接口的时候,一般都是像下面这样: @GetMapping("/01") public String hello(Map<String,Ob ...

  9. 使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法

    这篇文章是3篇系列文章的最后一部分,该系列文章探讨了如何为基于Spring Boot 2的应用程序启用OAuth2提供程序SSO. 3个帖子是: 引导兼容OpenID Connect的OAuth2授权 ...

最新文章

  1. 单链表-单链表A拆分为A(偶)和C(奇) (尾插法建表)
  2. python第七关再来一盘_7、 Python系列,七,的,集合
  3. js中父窗口获得模态窗口的返回值
  4. 微信 小程序 python 渲染_微信小程序渲染html内容
  5. [XSY4220] 九万步(结论)
  6. L1-063 吃鱼还是吃肉 (10 分)-PAT 团体程序设计天梯赛 GPLT
  7. 电信版行货黑莓9630修复历险记
  8. java .getbytes_java中String的getBytes方法使用
  9. HTTP 412状态码
  10. OCR为你定义驾驶证识别(驾照识别)技术
  11. 怎么学大数据?该从哪学起?
  12. 为什么图片反复压缩后会普遍会变绿而不是其他颜色?
  13. 女孩子生理期最易达成的5种效果[女生必看,男生为了女朋友也要转
  14. 商业大数据分析报告选题与背景撰写技巧
  15. 软件设计工程——设计流程
  16. js 导出excel,设置下载的标题
  17. BERT模型—7.BERT模型在句子分类任务上的微调(对抗训练)
  18. python求勾股定理_python入门学习随记(二)(勾股定理、球体积、利率、移位和进制转换、数字求和)...
  19. 布局了七年的金融,能为字节跳动带来更大的想象空间吗?
  20. 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_函数

热门文章

  1. 2022-2028年中国电池制造行业市场供需规模及投资前景预测报告
  2. 【J2SE】语言基础
  3. 【Sql Server】Database-存储过程
  4. GPT3 api接口调用
  5. 如何在CPU上优化GEMM矩阵乘法
  6. ADAS系统长篇综述(下)
  7. Django 验证码4.4
  8. PHP获取今天,昨天,本月,上个月,本年 起始时间戳
  9. [JAVA EE] JPA 技术实践:完成增、删、改、查操作
  10. Ubuntu 系统禁止或者改变中文简体切换繁体,方便使用AS全局搜索