Spring Web MVC入门

目录

学习Spring MVC

一、建立连接

@RestController和@RequestMapping

@RequestMapping 使用

访问地址:类路径+方法路径

既支持Get请求又支持Post请求

⭐️指定GET方法类型

🌙指定POST方法类型

二、请求

1️⃣传递单个参数

2️⃣传递多个参数

​3️⃣传递对象

4️⃣后端参数重命名(后端参数映射)

非必传参数设置

5️⃣传递数组 

6️⃣传递集合 

7️⃣传递JSON数据

JSON字符串和Java对象互转

​传递JSON对象

传递对象和传递JSON的区别

8️⃣获取URL中参数@PathVariable

​ 参数重命名

9️⃣上传文件@RequestPart

​ 参数重命名

🔟 获取Cookie/Session

​📝面经: Cookie 和 Session 的区别

获取Cookie

🍃传统获取Cookie

​🍂简洁获取Cookie:@CookieValue

Session存储

获取Session

🍈方式一:

🍒方式二: 

🥥方式三:    @SessionAttribute

1️⃣1️⃣获取Header

🌭传统获取 header

🍔简洁获取 Header:@RequestHeader

三、响应

返回静态页面:@Controller

前端代码

后端代码

返回数据:@ResponseBody

返回HTML代码片段

返回JSON

设置状态码

设置Header (了解)

设置Content-Type

设置其他Header


Spring Web MVC咱们简称之为: Spring MVC

Spring MVC 是⼀个实现了 MVC 模式的 Web 框架
 

学习Spring MVC

一、建立连接

将用户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调用到我们的Spring 程序

@RestController和@RequestMapping

@RestController
public class UserController {@RequestMapping("/hello")public String sayHello() {return "Hello Spring";}
}

@RequestMapping 使用

访问地址:类路径+方法路径
@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/hello")public String sayHello() {return "Hello Spring";}
}
既支持Get请求又支持Post请求
⭐️指定GET方法类型
@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping(value = "/hello", method = RequestMethod.GET)public String sayHello() {return "Hello Spring";}
}

@GetMapping 

@RestController
@RequestMapping("/user")
public class UserController {@GetMapping("/hello")public String sayHello() {return "Hello Spring";}
}
🌙指定POST方法类型
@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping(value = "/hello", method = RequestMethod.POST)public String sayHello() {return "Hello Spring";}
}

@PostMapping 

@RestController
@RequestMapping("/user")
public class UserController {@PostMapping("/hello")public String sayHello() {return "Hello Spring";}
}

二、请求

用户请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能

传递的普通参数,默认类型为String,后端接收时,会根据后端定义的类型来转换

1️⃣传递单个参数

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p1")public String p1(String name) {return "接收到参数 name:" + name;}
}

2️⃣传递多个参数

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p2")public String p2(String name, Integer age) {return "接收到参数,age:" + age + ", name:" + name;}
}

 3️⃣传递对象

public class User {private String name;private Integer age;private Integer gender;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getGender() {return gender;}public void setGender(Integer gender) {this.gender = gender;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", gender=" + gender +'}';}
}

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p3")public String p3(User user) {return "user:" + user;}
}

4️⃣后端参数重命名(后端参数映射)

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p4")public String p4(@RequestParam("userName") String name, Integer age) {return "接收到参数,age:" + age + ", name:" + name;}
}


使用@RequestParam进行参数重命名时,请求参数只能和@RequestParam声明的名称一
致,才能进行参数绑定和赋值.
使用@RequestParam进行参数重命名时,参数就变成了必传参数.

非必传参数设置
@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p4")public String p4(@RequestParam(value = "userName", required = false) String name, Integer age) {return "接收到参数,age:" + age + ", name:" + name;}
}

5️⃣传递数组 

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p5")public String p5(String[] arr) {return "arr:" + List.of(arr);}
}


6️⃣传递集合 

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p6")public String p6(@RequestParam List<String> list) {return "list:" + list;}
}

7️⃣传递JSON数据

JSON字符串和Java对象互转
package com.example.demo;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;public class JsonTest {public static void main(String[] args) throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();User user = new User();user.setName("lisi");user.setAge(18);user.setGender(1);// 对象转jsonString s = objectMapper.writeValueAsString(user);System.out.println(s);//json转对象User user1 = objectMapper.readValue(s, User.class);System.out.println(user1);}
}

传递JSON对象

@RequestBody

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p7")public String p7(@RequestBody User user) {//从请求正文中return "User:" + user;}
}

 

传递对象和传递JSON的区别
 

8️⃣获取URL中参数@PathVariable

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/article/{articleId}")public String p8(@PathVariable("articleId") String articleId) {//从请求正文中return "articleId:" + articleId;}
}
 参数重命名
@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/article/{articleId}/{name}")public String p8(@PathVariable("articleId") String id, @PathVariable String name) {//从请求正文中return "articleId:" + id + ",name:" + name;}
}

 

 如果方法参数名称和需要绑定的URL中的变量名称一致时,可以简写, 不用给@PathVariable的属性赋值

如果方法参数名称和需要绑定的URL中的变量名称不一致时, 需要给@PathVariable的属性value赋值

9️⃣上传文件@RequestPart

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p9")public String p9(MultipartFile file) {System.out.println(file.getOriginalFilename());return "文件名称:" + file.getOriginalFilename();}
}

 参数重命名
@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/p9")public String p9(@RequestPart("fileName") MultipartFile file) {System.out.println(file.getOriginalFilename());return "文件名称:" + file.getOriginalFilename();}
}

🔟 获取Cookie/Session

 

📝面经: Cookie 和 Session 的区别

●Cookie是客户端保存用户信息的一种机制.Session是服务器端保存用户信息的一种机制.
●Cookie和Session之间主要是通过Sessionld关联起来的,Sessionld是Cookie和Session之间的桥梁
●Cookie和Session经常会在一起配合使用.但是不是必须配合.
     o 完全可以用Cookie来保存一些数据在客户端.这些数据不一定是用户身份信息,也不一定是Sessionld
      o Session中的sessionld也不需要非得通过Cookie/Set-Cookie传递,比如通过URL传递.

获取Cookie
🍃传统获取Cookie
@RestController
@RequestMapping("/header")
public class HeaderController {@RequestMapping("/getCookie")public String getCookie(HttpServletRequest request) {Cookie[] cookies = request.getCookies();if (cookies != null) {for (Cookie cookie : cookies) {System.out.println(cookie.getName() + ":" + cookie.getValue());}}return "获取cookie成功";}
}

🍂简洁获取Cookie:@CookieValue
@RestController
@RequestMapping("/header")
public class HeaderController {@RequestMapping("/getCookie")public String getCookie2(@CookieValue("baidu") String baidu) {return "从Cookie中获取信息,baidu:" + baidu;}
}

Session存储
@RestController
@RequestMapping("/header")
public class HeaderController {@RequestMapping("/setSession")public String setSession(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute("userName", "zhangsan");session.setAttribute("age", "15");return "设置session成功";}
}
获取Session
🍈方式一:
@RequestMapping("/getSession")public String getSession(HttpServletRequest request) {HttpSession session = request.getSession();if (session != null) {String userName = (String) session.getAttribute("userName");System.out.println(session.getAttribute("age"));return "从session中获取信息,userName:" + userName;}return null;}
🍒方式二: 
@RequestMapping("/getSession")public String getSession(HttpSession session) {if (session != null) {String userName = (String) session.getAttribute("userName");System.out.println(session.getAttribute("age"));return "从session中获取信息,userName:" + userName;}return null;}
🥥方式三:    @SessionAttribute
@RequestMapping("/getSession")public String getSession(@SessionAttribute("userName") String userName) {return "从session中获取信息,userName:" + userName;}

1️⃣1️⃣获取Header

🌭传统获取 header
@RestController
@RequestMapping("/header")
public class HeaderController {@RequestMapping("/getHeader")public String getHeader(HttpServletRequest request) {String uesrAgent = request.getHeader("User-Agent");return "uesrAgent:" + uesrAgent;}
}

🍔简洁获取 Header:@RequestHeader
@RestController
@RequestMapping("/header")
public class HeaderController {@RequestMapping("/getHeader")public String getHeader(@RequestHeader("User-Agent") String uesrAgent) {return "uesrAgent:" + uesrAgent;}
}

三、响应

返回静态页面:@Controller

前端代码
后端代码
@RequestMapping("/response")
@Controller
public class ResponseController {@RequestMapping("/returnHtmlPage")public String returnHtmlPage() {return "/hello.html";}
}

返回数据:@ResponseBody

@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {@RequestMapping("/returnHtmlPage")public String returnHtmlPage() {return "/hello.html";}
}

返回HTML代码片段

@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {@RequestMapping("/returnHtml")public String returnHtml() {return "<h1>returnHtml<h1>";}
}

返回JSON

@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {@RequestMapping("/returnJson")public User returnJson() {User user = new User();user.setName("zhangsan");user.setAge(18);return user;}
}

设置状态码

@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {@RequestMapping("/setStatus")public User setStatus(HttpServletResponse response) {User user = new User();user.setName("zhangsan");user.setAge(18);response.setStatus(500);return user;}
}

设置Header (了解)

设置Content-Type
@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {@RequestMapping("/setHeader")public String setHeader() {return "{\"success\":true}";}
}


@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {@RequestMapping(value = "/setHeader",produces = "application/json")public String setHeader() {return "{\"success\":true}";}
}

设置其他Header
@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {@RequestMapping("/setHeader")public String setHeader(HttpServletResponse response) {response.setHeader("myKey", "myValue");return "success";}
}

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

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

相关文章

案例-04.部门管理-删除

一.功能演示 二.需求说明 三.接口文档 四.思路 既然是通过id删除对应的部门&#xff0c;那么必然要获取到前端请求的要删除部门的id。id作为请求路径传递过来&#xff0c;那么要从请求路径中获取&#xff0c;id是一个路径参数。因此使用注解PathVariable获取路径参数。 请求方…

mysql的rpm包安装

(如果之前下载过mariadb&#xff0c;使用yum remove mariadb卸载&#xff0c;因为mariadb与rpm包安装的mysql有很多相似的组件和文件&#xff0c;会发生冲突&#xff0c;而源码包安装的mysql不会&#xff0c;所以不用删除源码包安装myqsl&#xff0c;只删除mariadb就可以&#…

内容中台重构企业内容管理流程驱动智能协作升级

内容概要 内容中台作为企业数字化转型的核心基础设施&#xff0c;通过技术架构革新与功能模块整合&#xff0c;重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系&#xff0c;将分散的创作、存储、审核及分发环节纳入统一平台管理。基…

haproxy实现MySQL服务器负载均衡

1.环境准备 准备好下面四台台服务器&#xff1a; 主机名IP角色open-Euler1192.168.121.150mysql-server1openEuler-2192.168.121.151mysql-server2openEuler-3192.168.121.152clientRocky8-1192.168.121.160haproxy 2.mysql服务器配置 1.下载mariadb #下载mariadb [rootop…

数据大屏炫酷UI组件库:B端科技风格PSD资源集

一个既精准传达数据内涵&#xff0c;又极具视觉冲击力的UI设计&#xff0c;无疑是提升用户体验、彰显品牌科技实力的关键。但面对如此高要求&#xff0c;UI设计师们往往面临着寻找高质量设计素材的巨大挑战。为此&#xff0c;我们精心打造了这款数据大屏炫酷UI组件库&#xff0…

强化学习笔记7——DDPG到TD3

前提&#xff1a;基于TD 的方法多少都会有高估问题&#xff0c;即Q值偏大。原因两个&#xff1a;一、TD目标是真实动作的高估。 二&#xff1a;自举法高估。 DDPG 属于AC方法&#xff1a;异策略&#xff0c;适合连续动作空间&#xff0c;因为他的策略网络直接输出的动作&#…

150,[5] BUUCTF WEB [BJDCTF2020]EasySearch

进入靶场 有个文件 和之前一道题如出一辙 <?php// 开启输出缓冲&#xff0c;将后续所有的输出内容先暂存到缓冲区&#xff0c;而不是直接发送到浏览器ob_start();/*** 生成一个基于随机字符串和唯一标识符的哈希值* return string 返回生成的 sha1 哈希值*/function get_…

分布式光纤传感:为生活编织“感知密网”

分布式光纤测温技术虽以工业场景为核心&#xff0c;但其衍生的安全效益已逐步渗透至日常生活。 分布式光纤测温技术&#xff08;DTS&#xff09;作为一种先进的线型温度监测手段&#xff0c;近年来在多个领域展现了其独特的优势。虽然其核心应用场景主要集中在工业、能源和基础…

腾讯发布混元-3D 2.0: 首个开源高质3D-DiT生成大模型

在之前的文章中已经和大家介绍过腾讯HunYuan-3D 1.0&#xff0c;感兴趣的小伙伴可以点击下面链接阅读~ HunYuan-3D 是首个开源高质3D-DiT生成大模型&#xff0c;几何与纹理解藕生成&#xff0c;一键将创意具象化。 2.0模型架构图及介绍 2.0模型将几何和纹理生成解耦&#xff0…

CentOS搭建PPPOE服务器

一、安装软件包 yum -y install rp-pppoe 二、配置服务器 1.修改配置文件 打开/etc/ppp/pppoe-server-options文件 nano /etc/ppp/pppoe-server-options 编辑为以下内容&#xff1a; # PPP options for the PPPoE server # LIC: GPL require-pap require-chap login …

数据结构实现顺序表的尾插,尾删,按值查找/修改/删除,按下标查找/增加/删除

头文件&#xff1a;head.h #ifndef __HEAD_H__ #define __HEAD_H__#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSIZE 20enum num {success,false-1};typedef int datatype;typedef struct {int len;datatype data[MAXSIZE]; }S…

IDEA集成DeepSeek

引言 随着数据量的爆炸式增长&#xff0c;传统搜索技术已无法满足用户对精准、高效搜索的需求。 DeepSeek作为新一代智能搜索技术&#xff0c;凭借其强大的语义理解与深度学习能力&#xff0c;正在改变搜索领域的游戏规则。 对于 Java 开发者而言&#xff0c;将 DeepSeek 集成…

2025.2.16

Web [GDOUCTF 2023]泄露的伪装&#xff1a; 点进去看就是装神弄鬼&#xff0c;那就直接扫描 果然有东西 第一个是php代码 第二个是个文件 访问发现是一样的 分析一下&#xff1a;使用 file_get_contents($cxk) 函数读取 $cxk 变量中指定的 URL 或文件的内容。 如果读取的内…

WPF的Prism框架的使用

安装Prism.DryIoc库&#xff1a; Prism的区域和模块化&#xff1a; 一个区域可以显示一个用户控件 一个模块就是一个项目&#xff0c;也就是一个类库 动态切换用户控件的案例&#xff1a; <Grid><Grid.RowDefinitions><RowDefinition Height"auto"…

S4D480 S4HANA 基于PDF的表单打印

2022年元旦的笔记草稿 SAP的表单打印从最早的SAPScripts 到后来的SMARTFORM&#xff0c;步入S4时代后由于Fiori的逐渐普及&#xff0c;更适应Web的Adobe Form成了SAP主流output文件格式。 目录 一、 基于PDF表单打印系统架构Interface 接口Form 表单ContextLayout 二、表单接…

chrome://version/

浏览器输入&#xff1a; chrome://version/ Google浏览器版本号以及安装路径 Google Chrome131.0.6778.205 (正式版本) &#xff08;64 位&#xff09; (cohort: Stable) 修订版本81b36b9535e3e3b610a52df3da48cd81362ec860-refs/branch-heads/6778_155{#8}操作系统Windows…

【Kubernetes】k8s 部署指南

1. k8s 入门 1.1 k8s 简介 需要最需要明确的就是&#xff1a;kubernetes&#xff08;简称 k8s &#xff09; 是一个 容器编排平台 &#xff0c;换句话说就是用来管理容器的&#xff0c;相信学过 Docker 的小伙伴对于容器这个概念并不陌生&#xff0c;打个比方&#xff1a;容器…

【Python】Python入门——基础语法及顺序语句

Python入门——基础语法及顺序语句 官方文档地址&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.htmlPython 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构&#xff0c;还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语…

在使用 uni.getLocation 步骤和一些坑

1.使用前需要去微信小程序申请开通wx.getLocation 获取当前位置的api (不申请上线之后会使用不了)&#xff0c;申报资料的话我让ai帮我写的&#xff0c;说一下使用场景弄几张图片就可以了 地址 &#xff1a; 小程序 2.第二个需要配置域名 具体申请腾讯地图的方法参考 &…

Docker高级篇

1.Mysql主从复制Docker版本 mysql主从复制原理 binlog 1.新建主服务器容器实例 docker run -d -p 3307:3306 --privilegedtrue \ -v /opt/mysql8.4.3/log:/var/log/mysql \ -v /opt/mysql8.4.3/conf:/etc/mysql/conf.d \ -v /opt/mysql8.4.3/data:/var/lib/mysql \ -e MYSQL…