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;}@Overridepublic 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; //数据 datapublic 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);}@Overridepublic String toString() {return "Result{" +"code=" + code +", msg='" + msg + '\'' +", data=" + data +'}';}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01背包问题 动态规划

01背包问题 动态规划 01背包问题 动态规划写了点代码 C#实现程序运行结果代码和程序已经上传 01背包问题 动态规划 很有意思的问题。 写了点代码 C#实现 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Ta…

Oracle函数使用

ROW_NUMBER函数 ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY column2 DESC) -- 根据column1分组按column2降序排序生成序号&#xff0c;序号由小到大,会生成一个唯一的序号 -- 例如column2中有两列值都为1,那他们的序号会有一个在上一个在下ROW_NUMBER() OVER(ORDER BY …

【数据结构】(三)树Tree

目录 1、基本概念 2、二叉树Binary Tree 3、树、森林与二叉树的转换 4、赫夫曼树Huffman Tree与赫夫曼编码Huffman Coding 1、基本概念 &#xff08;1&#xff09;树&#xff08;Tree&#xff09;是 n&#xff08;n ≥\geq 1&#xff09;个节点的有限集&#xff0c;n 0时称…

Android悬浮窗实现步骤

最近想做一个悬浮窗秒表的功能&#xff0c;所以看下悬浮窗具体的实现步骤 1、初识WindowManager 实现悬浮窗主要用到的是WindowManager SystemService(Context.WINDOW_SERVICE) public interface WindowManager extends ViewManager {... }WindowManager是接口类&#xff0c…

【CSS】css获取子元素的父元素,即通过子元素选择父元素(使用CSS伪类 :has() :not() )

这里写目录标题 一、:has获取第一个div获取包含 a.active 的 li获取第二个div 二、:not除了类名为active 的 a,其他的a的字体都为18px <div><h1>标题</h1></div><div><ul><li><a href"#" class"active">测…

k8s中调整Pod数量限制的方法

一、介绍 Kubernetes节点每个默认允许最多创建110个pod&#xff0c;有时可能由于主机配置扩容的问题&#xff0c;从而需要修改节点pod运行数量的限制。 即&#xff1a;需要调整Node节点的最大可运行Pod数量。 一般来说&#xff0c;只需要在kubelet启动命令中增加–max-pods参数…

大数据 - Hadoop系列《四》- MapReduce(分布式计算引擎)的核心思想

上一篇&#xff1a; 大数据 - Hadoop系列《三》- MapReduce&#xff08;分布式计算引擎&#xff09;概述-CSDN博客 目录 13.1 MapReduce实例进程 13.2 阶段组成 13.4 概述 13.4.1 &#x1f959;Map阶段&#xff08;映射&#xff09; 13.4.2 &#x1f959;Reduce阶段执行过…

安卓视图基础

目录 设置视图的宽高 设置视图的间隔 设置视图的对齐方式 设置视图的宽高 设置视图的间隔 设置视图的对齐方式 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"a…

【Linux】线程池的简易实现(懒汉模式)

文章目录 前言一、懒汉方式1.普通模式1.线程安全模式 二、源代码1.Task.hpp(要执行的任务)2.ThreadPool.hpp(线程池)3.Main.cpp 前言 线程池: 一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监…

公司如何测试员工对网络钓鱼的反应?

&#x1f4e9; "下午好&#xff0c;文件已经商定。请到下面链接的门户网站下载"。 我们每个人都可能在工作电子邮件中收到此类内容的信息&#xff1a;它可能来自真正的员工&#xff0c;也可能来自公司的信息安全服务部门&#xff0c;该部门决定对您进行检查&#xf…

vue3项目下载@element-plus/icons-vue苦笑不得的乌龙

一、背景 node.js版本&#xff1a;v16.20.1 npm版本&#xff1a;8.19.4 pnpm版本&#xff1a;8.0.0 二、心路历程 pnpm install element-plus/icons-vue 用命令下载element-plus/icons-vue的时候&#xff0c;报错并提醒如图 是&#xff0c;我按照提示执行了&#xff0c;结…

seata Adjusted frame length exceeds 8388608: 539959368,nacos+mysql+seata部署

问题&#xff1a;docker 部署 seata 后出现异常 seata Adjusted frame length exceeds 8388608: 539959368 CSDN上找了一圈都解决不了。github又半天访问不上。后来终于访问上了&#xff0c;发现这是一个很离谱的问题。。。 原因&#xff1a;访问错了端口 seata默认分两个端口…