SpringMVC数据接收(全面/详细注释)

 SpringMVC涉及组件:

  1. DispatcherServlet :  SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ]
  2. HandlerMapping :  SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它内部缓存handler(controller方法)和handler访问路径数据,被DispatcherServlet调用,用于查找路径对应的handler![秘书]
  3. HandlerAdapter : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它可以处理请求参数和处理响应数据数据,每次DispatcherServlet都是通过handlerAdapter间接调用handler,他是handler和DispatcherServlet之间的适配器![经理]
  4. Handler : handler又称处理器,他是Controller类内部的方法简称,是由我们自己定义,用来接收参数,向后调用业务,最终返回响应结果![打工人]
  5. ViewResovler : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效!视图解析器主要作用简化模版视图页面查找的,但是需要注意,前后端分离项目,后端只返回JSON数据,不返回页面,那就不需要视图解析器!所以,视图解析器,相对其他的组件不是必须的![财务]

1.快速体验使用MVC接收数据

  1. 在Maven项目中新建模块并转换成Web项目

  2. 导入依赖

    <properties><spring.version>6.0.6</spring.version><servlet.api>9.1.0</servlet.api><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties><dependencies><!-- springioc相关依赖  --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!-- web相关依赖  --><!-- 在 pom.xml 中引入 Jakarta EE Web API 的依赖 --><!--在 Spring Web MVC 6 中,Servlet API 迁移到了 Jakarta EE API,
    因此在配置 DispatcherServlet 时需要使用Jakarta EE 提供的相应类库和命名空间。--><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-web-api</artifactId><version>${servlet.api}</version><scope>provided</scope></dependency><!-- springwebmvc相关依赖  --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency></dependencies>
  3. 创建Controller类

    @Controller
    @RequestMapping("param")
    public class ParamController {//后端直接接收//  /param/data?name=root&age=18//  形参列表,填写对应名称的参数即可!  请求参数名 = 形参参数名即可!//  1. 名称相同  2.可以不传递 不报错@RequestMapping("data")@ResponseBodypublic String data(String name,int age){System.out.println("接收到:name = " + name + ", age = " + age);return "成功给前端返回:name = " + name + ", age = " + age;}
    }
  4. Spring MVC核心组件配置类

    @Configuration
    @ComponentScan("com.example")
    public class MvcConfig {//@Bean方式配置handlerMapper和handlerAdapter@Beanpublic RequestMappingHandlerMapping handlerMapping(){return  new RequestMappingHandlerMapping();}@Beanpublic RequestMappingHandlerAdapter handlerAdapter(){return  new RequestMappingHandlerAdapter();}
    }
  5. SpringMVC环境搭建

    /*** description: 可以被web项目加载,会初始化ioc容器,会设置dispatcherServlet的地址* @author UserName*/
    public class SpringMvcInit extends AbstractAnnotationConfigDispatcherServletInitializer {// service mapper层的ioc容器的配置@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[0];}// 设置我们项目对应的配置 springmvc controller@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{MvcConfig.class};}// 配置springmvc内部自带servlet 的访问地址 !@Overrideprotected String[] getServletMappings() {return new String[]{ "/"};}
    }
  6. 运行测试      ​​​​​

2.SpringMVC数据接收

@ResponseBody注解

用来标识方法或者方法返回值,表示方法的返回值是要直接返回给客户端的数据,而不是由视图解析器来解析并渲染生成响应体(viewResolver没用)。

    1.访问路径设置

        1.1 在@RequestMapping注解指定精确地址匹配。
@Controller
public class HelloController {@RequestMapping("springmvc/hello") //对外访问的地址 到handlerMapping注册的注解@ResponseBody  //直接返回字符串给前端,不要找视图解析器!!!public String hello(){System.out.println("HelloController.hello");//返回给前端return "hello springmvc!!";}
}
        1.2 通过使用通配符,匹配多个类似的地址。
@Controller
public class HelloController {@RequestMapping("springmvc/*")@ResponseBody  //直接返回字符串给前端,不要找视图解析器!!!public String handleAllBooks() {// 匹配所有以 /books/ 开头的路径System.out.println("匹配到一层springmvc/*");return "一层springmvc/*";}@RequestMapping("springmvc/**")@ResponseBody  //直接返回字符串给前端,不要找视图解析器!!!public String handleBookDetails() {// 匹配所有以 /books/ 开头的路径及其子路径System.out.println("匹配到多层springmvc/**");return "多层springmvc/**";}
}

                运行访问:

###
GET http://localhost:8080/springmvc/aaa
###
GET http://localhost:8080/springmvc/aaa/bb//输出:
springmvc/*
springmvc/**
        1.3 标记类+标记handler方法
@Controller
@RequestMapping("springmvc")
public class HelloController {@RequestMapping("hello")//底层是字符串拼接,但mvc会自动加“/”号@ResponseBody  //直接返回字符串给前端,不要找视图解析器!!!public String hello() {System.out.println("hello mvc");return "hello mvc";}
}

                运行访问:

###
GET http://localhost:8080/springmvc/aaa/bb//输出:
hello mvc
        1.4 附带请求方式限制

默认情况下:@RequestMapping("/logout") 任何请求方式都可以访问!

@RequestMapping(value="/login",method=RequestMethod.GET)
等于->
@GetMapping(value="/login")

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

可以特定指定,但违背请求方式,会出现405异常!!!:

@Controller
public class UserController {/*** method = RequestMethod.POST 可以指定单个或者多个请求方式!* 注意:违背请求方式会出现405异常!*/@RequestMapping(value = {"/user/login"} , method = RequestMethod.POST)@ResponseBodypublic String login(){System.out.println("UserController.login");return "login success!!";}
//    @PostMapping(value = {"/user/login"})
//    @ResponseBody
//    public String login1(){
//        System.out.println("UserController.login");
//       return "login success!!";
//    }@RequestMapping(value = {"/user/register"},method = {RequestMethod.POST, RequestMethod.GET})@ResponseBodypublic String register(){System.out.println("UserController.register");return "register success!!";}}

 2.param参数接收

@Controller
@RequestMapping("param")
public class ParamController {//后端直接接收//  /param/data?name=root&age=18//  形参列表,填写对应名称的参数即可!  请求参数名 = 形参参数名即可!//  1. 名称相同  2.可以不传递 不报错@RequestMapping("data")@ResponseBodypublic String data(String name,int age){System.out.println("name = " + name + ", age = " + age);return "成功给后台返回:name = " + name + ", age = " + age;}//注解指定//指定任意的请求参数名  要求必须传递  要求不必须传递 给与一个默认值// /param/data1?account=root&page=1// account必须传递   page可以不必须传递,如果不传递默认值就是1/*** @RequestParam -> 形参列表  指定请求参数名 或者是否必须传递 或者 非必须传递设置默认值*                用法: @RequestParam(value="指定请求参数名,如果形参名和请求参数名一致,可以省略!",*                                    required = false 前端是否必须传递此参数,默认是必须 , 不传400异常!,*                                    defaultValue = "1" 当非必须传递 false ,可以设置默认值)*/@GetMapping("data1")@ResponseBodypublic String data1(@RequestParam(value = "account") String username,@RequestParam(required = false,defaultValue = "1") int page){System.out.println("username = " + username + ", page = " + page);return "username = " + username + ", page = " + page;}//特殊值// 一名多值   key=1&key=2 直接使用集合接值即可//param/data2?hbs=吃&hbs=玩&hbs=学习//不加注解@RequestParam 将 hbs对应的一个字符串直接赋值给集合! 类型异常!//加了注解,经理就会将集合 add加入对应的字符串@GetMapping("data2")@ResponseBodypublic String data2(@RequestParam List<String> hbs){System.out.println("hbs = " + hbs);return "ok";}//使用实体对象接值   用户注册(用户的信息)    -》    对应的实体类   -》     插入到数据库 表//param/data3?name=二狗子&age=18 准备一个对应属性和get|set方法的实体类即可! -> 形参列表声明对象参数即可!@RequestMapping("data3")@ResponseBodypublic String data3(User user){System.out.println("user = " + user);return user.toString();}
}

测试data3:

3. 动态路径参数接收

动态路径设计: /user/{动态部分}/{动态部分}

@Controller
@RequestMapping("path")
@ResponseBody
public class PathController {//  path/账号/密码//动态路径设计  {key} =  *  {key} 在形参列表获取传入的参数//接受路径参数  String account,String password -> 接受param格式参数// 必须使用 @PathVariable@RequestMapping("{account}/{password}")public String login(@PathVariable(value = "account") String username, @PathVariable String password){System.out.println("username = " + username + ", password = " + password);return "username = " + username + ", password = " + password;}
}

运行测试:

4. JSON参数接收

前端传递 JSON 数据时,Spring MVC 框架可以使用 @RequestBody 注解来将 JSON 数据转换为 Java 对象。@RequestBody 注解表示当前方法参数的值应该从请求体中获取,并且需要指定 value 属性来指示请求体应该映射到哪个参数上

实体类:
public class Person {private String name;private int age;private String gender;// getter 和 setter 略
}
使用 @RequestBody 注解
@RequestMapping(value = "json")
@Controller
@ResponseBody
public class JsonController {@PostMapping("data")public String data(@RequestBody Person person) {System.out.println("person = " + person);return person.toString();}
}
pom.xml 加入jackson依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version>
</dependency>
使用@EnableWebMvc配置
/*TODO: 导入handlerMapping和handlerAdapter的三种方式
1.自动导入handlerMapping和handlerAdapter [推荐]
2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载
3.使用@Bean方式配置handlerMapper和handlerAdapter
*/
@EnableWebMvc//handlerAdapter配置了json转化器
@Configuration
@ComponentScan("com.example")
public class MvcConfig {//@Bean//public RequestMappingHandlerMapping handlerMapping(){//   return  new RequestMappingHandlerMapping();//}//@Bean//public RequestMappingHandlerAdapter handlerAdapter(){//    return  new RequestMappingHandlerAdapter();//}
}
运行测试:

或者前端使用Axios:

axios.post('/json/datas', {name: "Lucy",age: 18,gender: "man"
})

 5.Cookie参数接收

    1. 定义向响应中添加Cookie数据的方法。创建了一个名为 "cookieName",值为 "root" 的Cookie,并通过 response.addCookie(cookie) 将其添加到响应中,成功后返回“ok”。
    2.使用 @CookieValue 注解来接收名为 "cookieName" 的Cookie的值。
@Controller
@RequestMapping("cookie")
@ResponseBody
public class CookieController {@GetMapping("save")public String save(HttpServletResponse response){Cookie cookie = new Cookie("cookieName","这是一个cookieName");response.addCookie(cookie);return "ok";}@RequestMapping("data")public String data(@CookieValue(value = "cookieName") String value){System.out.println("value = " + value);return value;}
}
运行测试:

                

6.  请求头数据接收

@Controller
@RequestMapping("header")
@ResponseBody
public class HeaderController {@GetMapping("data")public String data(@RequestHeader("Host") String host){System.out.println("host = " + host);return "host = " + host;}
}

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

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

相关文章

OSCP靶场--Dibble

OSCP靶场–Dibble 考点(前端鉴权参数修改node.js代码注入 suid cp提权 ) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.173.110 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-09 06:36 EDT Nmap scan repor…

使用yolov8实现自动车牌识别(教程+代码)

该项目利用了一个被标记为“YOLOv8”的目标检测模型&#xff0c;专门针对车牌识别任务进行训练和优化。整个系统通常分为以下几个核心步骤&#xff1a; 数据准备&#xff1a; 收集包含车牌的大量图片&#xff0c;并精确地标记车牌的位置和文本信息。数据集可能包含各种环境下的…

MyLife 使用 TianliGPT 自动生成文章的AI摘要

博客还未迁移的时候&#xff0c;文章摘要就是使用 TianliGPT 自动生成的&#xff0c;现在迁移到 MyLife主题 后&#xff0c;特此记录一下。 前言 此教程的前提需要阅读 张洪Heo 的文章&#xff1a;如何让博客支持AI摘要&#xff0c;使用TianliGPT自动生成文章的AI摘要 购买 Ti…

探索 ChatGPT:解读 AI 对话的魔力(文末推荐一款AI工具聚合平台,可免费体验)

&#x1f947;作者简介&#xff1a;CSDN内容合伙人、新星计划第三季Python赛道Top1 &#x1f525;个人主页&#xff1a;hacker707的csdn博客 &#x1f4ac;推荐一款AI工具聚合平台&#x1f449;Hulu AI 探索 ChatGPT&#xff1a;解读 AI 对话的魔力 ChatGPT 的魅力如何使用 C…

Linux系统本地搭建DbGate数据库并结合内网穿透实现无公网IP远程连接

文章目录 1. 安装Docker2. 使用Docker拉取DbGate镜像3. 创建并启动DbGate容器4. 本地连接测试5. 公网远程访问本地DbGate容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Linux Ubuntu系统中使用Docker部署DbGate数据库管理工…

ios苹果ipa文件app内测分发有哪些操作流程

哈喽&#xff0c;大家好&#xff0c;咕噜淼淼又来和大家见面啦&#xff0c;在iOS应用开发过程中&#xff0c;进行内测分发是非常重要的一环&#xff0c;它能帮助开发者发现并修复应用中的问题&#xff0c;提升用户体验。上两期咱们一起探讨了一下App内测分发的目的及优势&#…

海山数据库(He3DB)原理剖析:浅析OLAP数据库计算引擎中的统计信息

背景&#xff1a; 统计信息在计算引擎的优化器模块中经常被提及&#xff0c;尤其是在基于成本成本优化&#xff08;CBO&#xff09;框架中统计信息发挥着至关重要的作用。CBO旨在通过评估执行查询的可能方法&#xff0c;并选择最有效的执行计划来提高查询性能。而统计信息则提…

深入OceanBase内部机制:系统架构与组件精讲

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 1️⃣OceanBase 整体架构1.1 分区1.2 分片1.3 日志流1.4 对等节点1.5 多租户 2️⃣OceanBase 架构与组件详解2.1 存储层2.2 …

备考ICA----Istio实验18---单集群中部署多个Istio控制面

备考ICA----Istio实验18—单集群中部署多个Istio控制面 单个 Kubernetes 控制面以及多个 Istio 控制面和多个网格。通过 Kubernetes 命名空间和 RBAC 实现软多租户业务隔离。 1. 环境准备 1.1 创建2个命名空间 kubectl create ns usergroup-1 kubectl label ns usergroup-…

头歌-机器学习 第16次实验 EM算法

第1关:极大似然估计 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握: 什么是极大似然估计; 极大似然估计的原理; 极大似然估计的计算方法。 什么是极大似然估计 没有接触过或者没有听过”极大似然估计“的同学…

vue商城项目vue shop vite

Vue Shop 是一个基于 Vue.js 框架构建的电子商务平台&#xff0c;它利用了 Vue 的响应式数据绑定和组件化的特点&#xff0c;为用户提供了一种快速开发和部署在线商店的解决方案。Vite 是一种现代化的前端构建工具&#xff0c;它提供了快速的冷启动、即时模块热更新&#xff08…

篮球竞赛|基于Springboot的篮球竞赛预约平台系统设计与实现(源码+数据库+文档)

篮球竞赛预约平台目录 基于Springboot的篮球竞赛预约平台系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台&#xff1a; 2、后台 管理员功能 用户功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff…

Jackson配置处理LocalDateTime、LocalDate等java8时间类型失效的问题解决

目录 前言 一、问题排查过程 1.1 SpringMvc是如何处理请求报文和响应报文 1.2 JacksonConfig配置排查 二、导致Jackson配置失效的原因 2.1 没有addSerializer 2.2 添加了EnableMvc注解 2.3 另外有地方配置了Jacksonhttpconver覆盖了配置 总结 前言 上一篇文章《使用Ja…

【matlab】如何解决打开缓慢问题(如何让matlab在十几秒内打开)

【matlab】如何解决打开缓慢问题&#xff08;如何让matlab在十几秒内打开&#xff09; 找到我们解压缩时Crack中的license_standalone.lic文件&#xff0c;将其拷贝 在安装matlab的路径下新建一个文件&#xff0c;粘贴上面的license_standalone.lic文件 在桌面鼠标移动到matl…

【Linux系列】如何确定当前运行的是 RHEL 9 还是 RHEL 8?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

lua学习笔记13(一些特殊用法的学习和三目运算符的实现)

print("*****************************一些特殊用法的学习*******************************") print("*****************************多变量赋值*******************************") local a,b,c114514,8848,"凌少" print(a) print(b) print(c) -…

DAS-MIL

DAS-MIL论文笔记 题目&#xff1a;DAS-MIL: Distilling Across Scales for MIL Classification of Histological WSIs 摘要 近年来&#xff0c;采用多实例学习 &#xff08;MIL&#xff09; 对全玻片图像 &#xff08;WSI&#xff09; 进行分类的情况有所增加。事实上&#…

VUE3的有关知识

学习vue3的原因 在vue2当中的组件的实例,都是data一块,computed一块,当我们去找某一变量相关的则十分麻烦,vue3是组合式API,vue2是选项式, vue3的优点: 1)组合式更易维护 2)更快的速度 3)更小的体积 4)更好的响应式proxy 使用vue3相关脚手架创建项目 步骤: 1)node -v node版…

pycharm pyspark连接虚拟机的hive表 读取数据

方法&#xff1a; hive配置hiveserver2和metastore url <!-- 指定hiveserver2连接的host --> <property><name>hive.server2.thrift.bind.host</name><value>hadoop111</value> </property><!-- 指定hiveserver2连接的端口号 -…

大数据基本名词

目录[-] 1.1. 1. Hadoop1.2. 2. Hive1.3. 3. Impala1.4. 4. Hbase1.5. 5.hadoop hive impala hbase关系1.6. 6. Spark1.7. 7. Flink1.8. 8. Spark 和 Flink 的应用场景 1. Hadoop 开源官网&#xff1a;https://hadoop.apache.org/ Hadoop是一个由Apache基金会所开发的分…