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

news2024/10/7 12:28:18

本篇主要介绍一个发送请求的工具—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 +
                '}';
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知识蒸馏(paper翻译)

paper&#xff1a;Distilling the Knowledge in a Neural Network 摘要&#xff1a; 提高几乎所有机器学习算法性能的一个非常简单的方法是在相同的数据上训练许多不同的模型&#xff0c;然后对它们的预测进行平均[3]。 不幸的是&#xff0c;使用整个模型集合进行预测非常麻烦…

养老院|基于Springboot的养老院管理系统设计与实现(源码+数据库+文档)

养老院管理系统目录 目录 基于Springboot的养老院管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、老人信息管理 2、家属信息管理 3、公告类型管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选…

2023强网杯复现

强网先锋 SpeedUp 要求2的27次方的阶乘的逐位之和 在A244060 - OEIS 然后我们将4495662081进行sha256加密 就得到了flag flag{bbdee5c548fddfc76617c562952a3a3b03d423985c095521a8661d248fad3797} MISC easyfuzz 通过尝试输入字符串判断该程序对输入字符的验证规则为9…

计算机设计大赛 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

万物简单AIoT 端云一体实战案例学习 之 智能小车

学物联网,来万物简单IoT物联网!! 下图是本案的3步导学,每个步骤中实现的功能请参考图中的说明。 1、简介 1.1、背景 市面上各种遥控的小车很多,小车的性能不同具备的能力也不一样,大概实现的逻辑就是通过遥控器控制小车的前进、后退、左转或者右转。遥控小车具备一定…

精通Python第14篇—Pyecharts神奇妙笔,绘制多彩词云世界

文章目录 安装Pyecharts基本的词云图绘制自定义词云图样式多种词云图合并高级词云图定制与交互1. 添加背景图片2. 添加交互效果 使用自定义字体和颜色从文本文件生成词云图总结&#xff1a; 在数据可视化领域&#xff0c;词云图是一种极具表现力和趣味性的图表&#xff0c;能够…

IDEA 取消参数名称提示、IDEA如何去掉变量类型提醒

一、IDEA 取消参数名称显示 取消显示形参名提示 例如这样的提示信息 二、解决方法 1、File—>Setting–>Editor—>Inlay Hints—>Java 去掉 Show Parameter hints for 前面的勾即可&#xff0c;然后Apply—>Ok 2、右键Disable Hints

java 图书管理系统 spring boot项目

java 图书管理系统ssm框架 spring boot项目 功能有管理员模块&#xff1a;图书管理&#xff0c;读者管理&#xff0c;借阅管理&#xff0c;登录&#xff0c;修改密码 读者端&#xff1a;可查看图书信息&#xff0c;借阅记录&#xff0c;登录&#xff0c;修改密码 技术&#…

离散数学5

集合的基本概念 集合间的关系 特殊集合 集合的运算 以上都是高一学过的内容。 有穷集的计数&#xff08;容斥定理&#xff09; 序偶与集合的笛卡尔积 二元关系及其表示法 二元关系的性质 前件<x,y>,<y,z>后件<x,z>通过前件能推出后件&#xff0c;只有前真…

【51单片机系列】应用设计——8路抢答器的设计

51单片机应用——8路抢答器设计 文章设计文件及代码&#xff1a;资源链接。 文章目录 要求&#xff1a;设计思路软件设计仿真结果 要求&#xff1a; &#xff08;1&#xff09; 按下”开始“按键后才开始抢答&#xff0c;且抢答允许指示灯亮&#xff1b; &#xff08;2&…

空间域:空间组学的耶路撒冷

文章目录 环境配置与数据SquidpySpaGCN将基因表达和组织学整合到一个图上基因表达数据质控与预处理SpaGCN的超参优化空间域 参考文献 空间组学不能没有空间域&#xff0c;就如同蛋白质不能没有结构域。 摘要&#xff1a; 空间域是反映细胞在基因表达方面的相似性以及空间邻近性…

vulnhub靶场之Matrix-Breakout 2 Morpheus

一.环境搭建 1.靶场描述 This is the second in the Matrix-Breakout series, subtitled Morpheus:1. It’s themed as a throwback to the first Matrix movie. You play Trinity, trying to investigate a computer on the Nebuchadnezzar that Cypher has locked everyone…

微信小程序如何实现实时显示输入内容

如下所示&#xff0c;在许多场景中需要实时显示用户输入&#xff0c;具体实现见下文。 .wxml <input type"text" placeholder"请输入{{item.value}}(必填)" style"width:80%;" bindinput"get_required_value" data-info"{{it…

HarmonyOS应用开发者基础认证考试答案

HarmonyOS应用开发者基础认证考试答案 一、判断题 1.Ability是系统调度应用的最小单元&#xff0c;是能够完成一个独立功能的组件。一个应用可以包含一个或多个Ability。 正确(True) 2.所有使用Component修饰的自定义组件都支持onPageShow&#xff0c;onBackPress和onPageHide…

linux -- 中断管理 -- softirq机制

softirq的起始 do_IRQ();--> irq_enter(); //HARDIRQ部分的开始 更新系统中的一些统计量 标识出HARDIRQ上下文--> generic_irq_handler(); --> irq_exit(); //softirq部分的起始irq_exit /** Exit an interrupt context. Process softirqs if needed and possibl…

MOS栅极驱动和运放所需注意的关键参数

FD6288Q_&#xff08;JSMSEMI(杰盛微)&#xff09;FD6288Q中文资料_价格_PDF手册-立创电子商城 (szlcsc.com) MOS栅极驱动芯片&#xff1a; 自举电路&#xff1a; 电容的两个重要参数&#xff1a; ESR&#xff08;等效串联电阻&#xff09;和ESL&#xff08;等效串联电感&…

基于javaEE的社区食堂管理-计算机毕业设计源码48691

摘 要 随着餐饮业强劲发展的趋势&#xff0c;企业对食堂的管理也更加严格。面对材料成本的提高&#xff0c;人才资源匮乏&#xff0c;租金成本提高等问题&#xff0c;企业如何改善食堂管理系统将成为挑战。 一个高效便捷的食堂管理系统&#xff0c;能为食堂管理者带来极大的便利…

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-管理组件状态(九)

管理组件状态 一、概述 在应用中&#xff0c;界面通常都是动态的。下图所示&#xff0c;在子目标列表中&#xff0c;当用户点击目标一&#xff0c;目标一会呈现展开状态&#xff0c;再次点击目标一&#xff0c;目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 Ar…

XUbuntu22.04之如何创建、切换多个工作区(二百零九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

1.31总结

为什么和以前标题不一样了呢&#xff0c;是因为今天我感觉学到的东西太少了&#xff0c;很难按专题发&#xff0c;索性就直接写个总结水一篇好了 第一题&#xff1a;遍历问题 题解&#xff1a;真的纯思维题目&#xff0c;真的没啥&#xff0c;可说的&#xff0c;中序遍历取决于…