springboot-前后端分离——第二篇

本篇主要介绍一个发送请求的工具—postman,然后对请求中的参数进行介绍,例如简单参数、实体参数、数组参数、集合参数、日期类型参数以及json类型参数,对这些参数接收进行总结。最后对响应数据进行介绍,使用统一响应结果返回浏览器数据。


目录 :

目录

一、发送请求工具——postman

 二、注解的介绍:

三、请求参数的接收

1、简单参数:

2、实体参数

简单实体参数:

复杂实体参数:  

 3、数组类型参数:

4、集合类型参数:

5、日期类型参数:

6、JSON格式参数:

 四、响应数据:


一、发送请求工具——postman

postman是发送请求的工具,访问操作类中的方法,然后在这个方法return一个数据,就是响应数据,返回到postman;
请求响应的工具:打开postman,然后创建一个workspaces,可以在输入框内输入请求链接,并且可以选择请求方式:上面有save,可以将请求进行保存,需要先创建一个集合,然后保存到里面即可;(可以直接在这个软件中输入进行测试即可)

 二、注解的介绍:

RestController注解:

这个注解中包含两个注解:@Controller和@ResponseBody注解,@ResponseBody注解是将返回的数据结构转换为 Json 格式。

@RequestMapping注解:

将请求和处理请求的控制器方法关联起来,建立映射关系。SpringMVC中接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。

@RequestParam注解:如果方法形参名和请求参数名不匹配,可以使用该注解完成映射。

三、请求参数的接收

项目层级结构:

1、简单参数:

springboot方式下获取get请求的参数,先编写好请求类,然后运行启动类,然后在postman中输入请求链接,然后在后面输入?+参数以及参数的值,就可以在idea中获取到对应的参数并在postman中得到响应结果;注意controller类中的方法参数要和postman中请求链接后面的参数名要相同;

    //传统方式接受简单参数:
//    @RequestMapping("/simpleTest")
//    public String params_test(HttpServletRequest request){
//        String name=request.getParameter("name");
//        String age = request.getParameter("age");
//        int age1 = Integer.parseInt(age);
//        System.out.println(name+":"+age1);
//        return "OK";
//springboot方式接收简单参数:
    @RequestMapping("/simpleTest")
    public String params_test(String name, Integer age) {
        System.out.println(name + ":" + age);
        return "OK";
    }

在postman中进行测试:

后端也会得到响应数据:

2、实体参数

  • 简单实体参数:

请求参数名与形参对象属性名相同,定义一个实体类来接收:
例如,前端发送的参数为name和age,此时可以定义一个实体类User:

package com.web_test.pojo;

public class User {
    private String name;
    private Integer age;
    private Address address;

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public Address getAddress() {
        return address;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

然后在controller中写好接收方法:

    @RequestMapping("/gettest")
    public String shitilei(User user){
        System.out.println(user);
        return "OK";
    }

接下来在postman中进行测试:这样就可以将结果保存到对象的属性中。

  • 复杂实体参数:  

如果一个类中的属性是另一个类的对象,这个类又包含另外的属性,如何封装:注意前端发送的请求中的连接后的参数输入方式,以及重新定义一个新的类并且重写get set以及toString方法即可; 

 3、数组类型参数:

对于多选框,可以选择多个选项,因此一般用数组进行接收;注意数组的名称要与参数名称相同;

前端发送的请求中的参数为fruits=草莓&fruits=苹果,此时可以在controller方法形参定义一个String[] fruits数组来接收即可,注意,请求参数名为fruits,数组的名称也要为fruits。

 @RequestMapping("/arrayparam")
    public String arraytest(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }

 

4、集合类型参数:

同样,如果想用集合来接收fruits参数,需要使用@RequestParam注解来绑定参数关系。

 @RequestMapping("/listparam")
    public String listtest(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OK";
    }

 

5、日期类型参数:

如果前端发送的请求中的参数为time=2024-01-01 12:00:00,需要先规定格式,使用@DateTimeFormat注解完成日期参数格式转换,与请求参数相同的格式。

 @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "OK";
    }

postman中测试:

 

6、JSON格式参数:

json数据键名与形参对象属性名相同,定义一个实体类来进行接收,并且需要使用@RequestBody注解将json格式转化为实体类格式进行接收,与前面讲的注解中@ResponseBody注解类似,@ResponseBody是将实体类格式转化为json格式发送给前端。

//6.json参数:
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "OK";
    }

 postman中测试:

 四、响应数据:

可以发现返回的响应的数据类型很多,字符串列表对象等,一会这样解析,一会那样解析,很复杂,所以为了方便起见,采用统一的响应结果;返回一个result对象,用一个result类然后里面包含三个属性以及set和get方法,并且重载了静态的success方法;controller类中的方法可以直接return调用的静态方法然后传进去参数即可;最后返回的对象会解析成json格式展现;注意需要使用@ResponseBody注解进行转换,将实体类对象格式转化为json格式发送到前端如下:

package com.web_test.controller;

import com.web_test.pojo.Address;
import com.web_test.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//以下是响应部分:
//可以直接使用统一结果封装类接收参数:
@RestController
public class responseConntroller {
    //最初的方式:返回值为字符串:
//    @RequestMapping("/hello")
//    public String hello(){
//        System.out.println("hello World");
//        return "OK";
//    }
    //使用统一结果封装类接收参数:
    @RequestMapping("/hello")
    public Result hello(){
        System.out.println("hello World");
        return new Result(1,"success","Hello World!");
    }
    //最初的方式:返回值为对象:
//    @RequestMapping("/getAdr")
//    public Address getAdr(){
//        Address address=new Address();
//        address.setProvince("山东省");
//        address.setCity("济南");
//        return address;
//    }
    //使用统一结果封装类:返回值为对象:
    @RequestMapping("/getAdr")
    public Result getAdr(){
        Address address=new Address();
        address.setProvince("山东省");
        address.setCity("济南");
        return Result.success(address);
    }
   



}

实体类Result为:

package com.web_test.pojo;

/**
 * 统一响应结果封装类
 */
public class Result {
    private Integer code ;//1 成功 , 0 失败
    private String msg; //提示信息
    private Object data; //数据 data

    public Result() {
    }
    public Result(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }

    public static Result success(Object data){
        return new Result(1, "success", data);
    }
    public static Result success(){
        return new Result(1, "success", null);
    }
    public static Result error(String msg){
        return new Result(0, msg, null);
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/362139.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MIT6.5830 实验0

前置 本次实验使用 Golang 语言实现&#xff0c;在之前的年份中&#xff0c;都是像 cs186 那样使用 Java 实现。原因&#xff1a; Golang 语言作为现代化语言&#xff0c;简单易上手但功能强大。 使参加实验的同学有同一起跑线&#xff0c;而不是像Java那样&#xff0c;有些同…

增加 CentOS 系统的交换空间/虚拟内存(swap)大小

增加 CentOS 系统的交换空间/虚拟内存&#xff08;swap&#xff09;大小 文章目录 增加 CentOS 系统的交换空间/虚拟内存&#xff08;swap&#xff09;大小 检查当前交换空间&#xff1a; 在终端中执行以下命令来查看当前的交换空间情况&#xff1a; swapon --show这将显示当…

二级域名分发全解密支持对接易支付

二级域名分发全解密支持对接易支付 先改epay里面的config.php 你的支付域名 然后再改&#xff0c;二级域名分发网站 环境&#xff1a;php74 伪静态&#xff1a; location / { try_files $uri $uri/ /index.php?$query_string; } 源代码&#xff1a;百度网盘 密码&#xff1a;1…

实现注册登录时数据的加密传输(含前后端具体代码)

前言 http/https协议提交在被抓包时请求内容是明文的, 直接传输账号密码的风险非常大&#xff0c;故这里我们要对数据加密处理&#xff0c;并生成校验码&#xff0c;防止数据篡改 Http/https传输账户密码等数据时需要加密处理的原因主要有以下几点&#xff1a; 数据保密性&a…

20240131在WIN10下配置whisper

20240131在WIN10下配置whisper 2024/1/31 18:25 首先你要有一张NVIDIA的显卡&#xff0c;比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡&#xff01;】800&#xffe5; 2、请正确安装好NVIDIA最新的545版本的驱动程序和CUDA。 2、安装Torch 3、配置whisper http…

理解部署描述符的元素

理解部署描述符的元素 部署描述符是文件名为web.xml的XML文件&#xff0c;其包含了Web应用程序的配置信息。每个Web应用程序都有一个web.xml文件。web.xml文件的元素可用于指定servlet的初始化参数、不同文件的MIME类型、侦听器类&#xff0c;以及将URL模式映射到servlet上。一…

【SparkML系列3】特征提取器TF-IDF、Word2Vec和CountVectorizer

本节介绍了用于处理特征的算法&#xff0c;大致可以分为以下几组&#xff1a; 提取&#xff08;Extraction&#xff09;&#xff1a;从“原始”数据中提取特征。转换&#xff08;Transformation&#xff09;&#xff1a;缩放、转换或修改特征。选择&#xff08;Selection&…

【 USRP 相控阵】X波段相控阵开发平台用户指南

包装 一共三件。 1、AD9081-FMCA-EBZ AD9081 MxFE Evaluation Board, https://www.analog.com/eval-ad9081 AD9081 的全功能评估板使用 ACE 软件进行控制的 PC 软件HMC7044 的板载时钟用于管理套件和 FPGA 时钟选择切换到外部直接时钟 AD9081-FMCA-EBZ 评估板包括以各种模…

pinctrl/gpio子系统(1)-pinctrl子系统介绍及驱动源码分析

1.简介 在如今的驱动开发工作中&#xff0c;实际上已经很少去对着寄存器手册进行驱动开发了&#xff0c;一般板子拿到手&#xff0c;已经有原厂的驱动开发工程师&#xff0c;在gpio子系统、pinctrl子系统中将自家芯片的引脚适配好了。 我们直接基于设备树已配置好的寄存器值&a…

基于YOLOv8的工业油污缺陷检测,多种优化方法---自研注意力CPMS基于CBAM优化, mAP@0.5提升近五个点(二)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了工业油污缺陷检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析&#xff0c;以及如何优化提升检测性能。 &#x1f4a1;&#x1f4a1;&#x1f4a1;加入CPMS mAP0.5由原始的0.648提升至0.699 1.工业…

JMeter 下载、安装、启动

JMeter安装部署依赖Java环境&#xff0c;所以首先得安装JDK。 JDK下载JDK环境变量配置 ① 新建系统环境变量JAVA_HOME ② 编辑系统变量Path ③ 新建系统变量CLASSPATH变量 JMeter下载安装 Apache JMeter - Apache JMeter™ JMeter安装部署依赖Java环境&#xff0c;所以首…

如何在 Golang 中使用 crypto/ed25519 进行数字签名和验证

如何在 Golang 中使用 crypto/ed25519 进行数字签名和验证 引言crypto/ed25519 算法简介环境搭建和准备工作生成密钥对进行数字签名 验证签名实际应用场景案例总结 引言 在当今数字化时代&#xff0c;网络安全显得尤为重要。无论是在网上进行交易、签署合同&#xff0c;还是发…

结构体的学习

结构体与共用体&#xff0c;枚举 1.数据类型复习&#xff1a; 2结构体. eg&#xff1b;统计全校同学信息 需要记录的点--- 姓名&#xff0c;班级&#xff0c;性别&#xff0c;成绩&#xff0c;年龄 统计名字&#xff1a;char s[ ] [ 100 ] { "Tmo" } …

01神经网络的理论及实现

感知机的缺点就是需要设置合适的权重&#xff0c;而权重的设置都是人工操作的。 1、从感知机到神经网络 重新画出感知机的模型&#xff0c;在图上加上偏置&#xff0c;由于偏置始终为1&#xff0c;所以颜色加深。 图1-1 感知机模型 引入新函数(激活函数&#xff09;&#xff…

HTML+CSS:导航栏组件

效果演示 实现了一个导航栏的动画效果&#xff0c;当用户点击导航栏中的某个选项时&#xff0c;对应的选项卡会向左平移&#xff0c;同时一个小圆圈会出现在选项卡的中心&#xff0c;表示当前选项卡的位置。这个效果可以让用户更加清晰地了解当前页面的位置和内容。 Code <…

FFMPEG 之 DXVA2 硬解

一&#xff1a;FFMPEG 支持的硬解方式有很多&#xff1a; DXVA2、D3D11VA、CUDA、QSV、OPENCL、DRM、VAAPI、VDPAU、VIDEOTOOLBOX、MEDIACODEC。 有的支持 Windows 平台&#xff0c;有的支持 linux 平台&#xff0c;有的支持 apple ios 平台&#xff0c;…

【AI视野·今日NLP 自然语言处理论文速览 第七十七期】Mon, 15 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 15 Jan 2024 Totally 57 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Machine Translation Models are Zero-Shot Detectors of Translation Direction Authors Michelle Wastl, Ja…

手动上传文件

代码&#xff1a; import { Button, UploadProps, Upload, message } from antd; import { UploadOutlined } from ant-design/icons;const MyUpload: React.FC () > {const props: UploadProps {name: jpgFile,action: /xxxxx/xx/接口,headers: {authorization: token,}…

Python正则表达式语法

正则表达式是一种强大的文本处理工具&#xff0c;它可以用来搜索、匹配和替换特定的字符模式。在Python中&#xff0c;正则表达式常常被用于处理字符串数据&#xff0c;例如文本搜索、数据提取、格式验证等任务。本文将深入介绍Python中正则表达式的语法&#xff0c;帮助读者全…

ElasticSearch 应用实践 笔记

概述 介绍 ES 是一个开源的高扩展的分布式全文搜索引擎&#xff0c;是整个Elastic Stack技术栈的核心。它可以近乎实时的存储&#xff0c;检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。ElasticSearch的底层是开源库Lu…