服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Spring Boot 控制层之参数传递方法详解

Spring Boot 控制层之参数传递方法详解

2021-12-20 14:10CN-Dust Java教程

这篇文章主要介绍了Spring Boot 控制层之参数传递方法详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

当然,您自己创建一个项目也是可以的。

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 默认都是字符串类型

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

Spring Boot 控制层之参数传递方法详解

为空值的情况:

Spring Boot 控制层之参数传递方法详解

 

使用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 控制层之参数传递方法详解

 

使用实体类封装 ★

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

后台代码:

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

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

postman测试:
一般情况:

Spring Boot 控制层之参数传递方法详解

多的参数不接收:

Spring Boot 控制层之参数传递方法详解

为空:

Spring Boot 控制层之参数传递方法详解

名称不一致:

Spring Boot 控制层之参数传递方法详解

 

使用 @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测试:

Spring Boot 控制层之参数传递方法详解
Spring Boot 控制层之参数传递方法详解

报错:stu_name参数默认必填

Spring Boot 控制层之参数传递方法详解

添加默认值

@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测试:

Spring Boot 控制层之参数传递方法详解

全为空:

Spring Boot 控制层之参数传递方法详解

 

使用 @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测试了,用也可以,都一样)

Spring Boot 控制层之参数传递方法详解

错误的前端请求:

Spring Boot 控制层之参数传递方法详解


@PathVariable与@RequestParam的区别

Spring Boot 控制层之参数传递方法详解

 

使用 @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测试:

Spring Boot 控制层之参数传递方法详解

 

前端传递对象数组

后台代码

@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测试:

Spring Boot 控制层之参数传递方法详解

控制器代码完整版:

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;
  }

}

到此这篇关于Spring Boot 控制层之参数传递方法详解的文章就介绍到这了,更多相关Spring Boot 参数传递内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_36286039/article/details/120072344

延伸 · 阅读

精彩推荐
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12