iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Spring Boot 控制层之参数传递方法详解
  • 434
分享到

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

2024-04-02 19:04:59 434人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

当然,您自己创建一个项目也是可以的。 bean包下的Student.java package com.example.demo.bean; public class Studen

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

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

}

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

--结束END--

本文标题: Spring Boot 控制层之参数传递方法详解

本文链接: https://www.lsjlt.com/news/134718.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作