Java高级 | 【实验二】Springboot 控制器类+相关注解知识

隶属文章: Java高级 | (二十二)Java常用类库-CSDN博客

系列文章: Java高级 | 【实验一】Spring Boot安装及测试 最新-CSDN博客

目录

一、MVC模式

二、SpringBoot基础——控制层Controller详解

(一)主要工作

(二)重要注解

1、@Controller

2、@RequestMapping

(1)注解在方法上

(2)注解在类和方法上

(3)处理 HTTP 的各种方法

(4)处理多个 URI

(5)带 @RequestParam 

(6) header属性处理消息头

(7)params属性处理请求参数

(8) 处理动态 URI

3、@ResponseBody

4、@RestController 

5、@RequestMapping

6、@PostMapping

7、@GetMapping注解


一、MVC模式

      MVC(Model View Controller)是软件开发的一种思想,他把软件系统分为 以下三部分:

  1. Model(模型):用来处理程序中数据逻辑的部分
  2. View(视图):在应用程序中,专门和浏览器进行交互,展示数据的资源
  3. Contreller(控制器):负责协调视图和模型之间的交互,主要功能是处理视图发来的请求。即,根据请求决定使用用哪一个模型来处理,以及处理完后需要跳回到哪一个视图,也就是用来连接视图和模型的。

SpringBoot 是实现 SpringMVC 的一种方式,SpringMVC 将MVC思想进行了实现

二、SpringBoot基础——控制层Controller详解

 测试 :localhost:8080/hello

(一)主要工作

    从HTTP请求中获取信息,提取参数,并将其分发给不同的处理服务(service层),并向前端返回service层处理后的数据(JSON数据或者ModelAndView对象)。

(二)重要注解

   Controller层主要包含了以下6个注解。

  • @Controller
  • @RequestMapping
  • @ResponseBody
  • @RestController
  • @GetMapping
  • @PostMapping

1、@Controller

标识一个Java 类一个控制器

2、@RequestMapping

告知Spring的控制器类或者函数映射到哪个URL,通常@RequestMapping参数有:

(1)注解在方法上
package controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {// 映射到方法上// localhost:8080/user/login@RequestMapping("/user/login")public String login() {return "user login";}// localhost:8080/user/register@RequestMapping("/user/register")public String register() {return "user register";}
}

 

 

2)注解在类和方法上
package controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@Controller
//@RestController
@ResponseBody
@RequestMapping("/user")
public class UserController {@RequestMapping("/login")public String login() {return "user login";}@RequestMapping("/register")public String register() {return "user register";}
}
(3)处理 HTTP 的各种方法

声明HTTP请求所使用的方法类型。

package controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/home")
public class IndexController {@RequestMapping(method = RequestMethod.GET)public String get() {return "Hello from get";}@RequestMapping(method = RequestMethod.DELETE)public String delete() {return "Hello from delete";}@RequestMapping(method = RequestMethod.POST)public String post() {return "Hello from post";}@RequestMapping(method = RequestMethod.PUT)public String put() {return "Hello from put";}@RequestMapping(method = RequestMethod.PATCH)public String patch() {return "Hello from patch";}
}

 

 

 

 

 

(4)处理多个 URI
package controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/home")
public class MultipleMapping {@RequestMapping(value = {"","/page","page*","view/*,**/msg"})String indexMultipleMapping() {return "Hello from index multiple mapping.";}
}

 

 

 

(5)带 @RequestParam 

@RequestParam 注解配合 @RequestMapping 一起使用,可以将请求的参数同处理方法的参数绑定在一起。

package controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/home/getvalue")
public class ParamRequestMapping {@RequestMapping(value = "/id")//http://localhost:8080/home/getvalue/id?id=1234// 实现请求参数 id 与 处理方法参数 personId 的绑定。String getIdByValue(@RequestParam("id") String personId) {System.out.println("ID is " + personId);return "Get ID from query string of URL with value element"+personId;}@RequestMapping(value = "/personId")//http://localhost:8080/home/getvalue/personId?personId=7894String getId(@RequestParam String personId) {System.out.println("ID is " + personId);return "Get ID from query string of URL without value element";}@RequestMapping(value = "/name")//http://localhost:8080/home/getvalue/name?person=tomString getName(@RequestParam(value = "person", required = true) String personName) {return "Required element of request param"+personName;}/*下面方法可以处理下列URL/home/name?person=xyz/home/name*/@RequestMapping(value = "/getname")//http://localhost:8080/home/getvalue/getname?person=tomString getNameOfrequiredIsFalse(@RequestParam(value = "person", required = true) String personName) {return "Required element of request param"+personName;}/*下面方法是当用户没有传入person参数时,系统默认person=Tom/home/name?person=xyz/home/name*/@RequestMapping(value = "/getnametwo")String getNameByDefaultValue(@RequestParam(value = "person", defaultValue = "John") String personName) {return "Required element of request param"+personName;}
}

 

(6) header属性处理消息头

post() 方法能同时接受 text/plain 还有 text/html 的请求

package controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/home")
public class ControllHeader {@RequestMapping(value = "/head", headers = {"content-type=text/plain","content-type=text/html"})public String post() {return "Mapping applied along with headers";}
}

 

(7)params属性处理请求参数
package controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/switch")
public class ControllSwitch {@RequestMapping(value = "/fetch", params = {"personId=10"})String getParams(@RequestParam("personId") String id) {return "Fetched parameter using params attribute = " + id;}@RequestMapping(value = "/fetch", params = {"personId=20"})String getParamsDifferent(@RequestParam("personId") String id) {return "Fetched parameter using params attribute = " + id;}
}

 

(8) 处理动态 URI
package controller;import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/dynamic")
public class ControllerDynamicUriValue {//http://localhost:8080/dynamic/fetch/10@RequestMapping(value = "/fetch/{id}", method = RequestMethod.GET)String getDynamicUriValue(@PathVariable String id) {System.out.println("ID is " + id);return "Dynamic URI parameter fetched";}//http://localhost:8080/dynamic/fetch/tye/tom@RequestMapping(value = "/fetch/{id:[a-z]+}/{name}", method = RequestMethod.GET)String getDynamicUriValueRegex(@PathVariable("name") String name) {System.out.println("Name is " + name);return "Dynamic URI parameter fetched using regex";}
}

 

3、@ResponseBody

@ResponseBody 注解表示方法的返回值应该直接写入 HTTP 响应体中,而不是被解析为视图。正常情况下,Controller类中函数返回是一个模板对象(页面),但是有时候我们希望返回值数值型(字符串或者Json格式数据),这时就需要添加@ResponseBody注解。@ResponseBody注解可以添加到类或者函数上。

@ResponseBody返回的是数据

4@RestController 

@RestController是一个组合注解它结合了 @Controller 和 @ResponseBody 注解的功能(就相当于把两个注解组合在一起)。在使用 @RestController 注解标记的类中,每个方法的返回值都会以 JSON 或 XML 的形式直接写入 HTTP 响应体中,相当于在每个方法上都添加了 @ResponseBody 注解。

@RestController 适用于构建 RESTful 风格的 API,其中每个方法的返回值会直接序列化为 JSON 或 XML 数据并发送给客户端。而 @Controller 适用于传统的 MVC 架构,它负责处理请求并返回相应的视图。

 @RestController下的方法默认返回的是数据格式,@Controller注解标注的类下面的方法默认返回的就是以视图为格式

什么时候需要返回的是视图,什么时候需要返回数据?

当设计 RESTful API 时,一般的原则是:

如果客户端希望获取数据(例如 JSON、XML),则返回数据。

如果客户端希望展示数据(例如 HTML 页面),则返回视图。

5、@RequestMapping

@GetMapping注解可以用于类和方法上,用于定义HTTP GET请求的URL路径。当客户端发送HTTP GET请求时,Spring Boot会自动将请求映射到具有相应URL路径的控制器方法上。

6、@PostMapping

在 Spring Boot 中,我们经常需要编写 RESTful Web 服务,以便于客户端与服务器之间的通信。为了简化 RESTful Web 服务的开发,Spring Boot 提供了 @PostMapping 注解,它可以让我们更方便地编写 POST 请求处理方法。

@PostMapping是一个组合注解,它是@RequestMapping(method = RequestMethod.POST)的缩写。它用于处理HTTP POST请求的方法,只能标注在方法上。使用@PostMapping注解的方法将仅响应POST请求。

7、@GetMapping注解

@GetMapping也是一个组合注解,它是@RequestMapping(method = RequestMethod.GET)的缩写。它用于处理HTTP GET请求的方法,也只能标注在方法上。使用@GetMapping注解的方法将仅响应GET请求。

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

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

相关文章

MySQL 事务深度解析:面试核心知识点与实战

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Java 中 MySQL 事务深度解析:面试…

【趣味Html】第11课:动态闪烁发光粒子五角星

打造炫酷的动态闪烁发光粒子五角星效果 前言 在现代Web开发中,视觉效果的重要性不言而喻。今天我们将深入探讨如何使用HTML5 Canvas和JavaScript创建一个令人惊艳的动态闪烁发光粒子五角星效果。这个项目不仅展示了Canvas的强大功能,还涉及了粒子系统、…

6.RV1126-OPENCV 形态学基础膨胀及腐蚀

一.膨胀 1.膨胀原理 膨胀的本质就是通过微积分的转换,将图像A和图形B进行卷积操作合并成一个AB图像。核就是指任意的形状或者大小的图形B。例如下图,将核(也就是图形B)通过微积分卷积,和图像A合并成一个图像AB。 2.特点 图像就会更加明亮 …

机器学习实战37-基于情感字典和机器学习的股市舆情分析可视化系统

文章目录 一、项目背景数字时代情感分析情况二、项目流程1.数据采集与预处理2.复合情感分析模型构建3.舆情分析可视化:三、机器学习算法原理1.支持向量机基础2.核函数与高维映射3.情感分类特征融合4.模型训练与优化四、实现代码五、系统特点与优势1.复合情感分析模型2.多维度可…

STM32F407VET6学习笔记9:编译输出固定大小.bin文件

今日学习如何输出固定大小的.bin编译文件 目录 Keil_V5 fromelf.exe 软件目录: 魔棒添加命令输出bin文件: 输出固定大小的bin文件: 计算bin文件大小: 安装 SRecord 工具集: 使用SRecord: 参考文章&#…

【Web应用】若依框架:基础篇14 源码阅读-后端代码分析

文章目录 ⭐前言⭐一、课程讲解⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内容开源、框架、软件工程、全栈(,NET/Java/Python/C)、数据库、操作系统、大数据、人工智能、工控、网络、程序人生口号成为你…

Java 单例模式详解

目录 1. 饿汉式(Eager Initialization) 2. 懒汉式(Lazy Initialization) 3. 懒汉式 同步锁(线程安全) 4. 双重检查锁(Double-Checked Locking) 5. 静态内部类(推荐…

从 AMQP 到 RabbitMQ:核心组件设计与工作原理(一)

一、引言 ** 在当今分布式系统盛行的时代,消息队列作为一种关键的中间件技术,承担着系统间异步通信、解耦和削峰填谷的重要职责。AMQP(Advanced Message Queuing Protocol)作为一种高级消息队列协议,为消息队列的实现…

概率单纯形(Probability Simplex)

目录 定义性质在统计学中的应用在机器学习中的应用在信息论中的应用在优化问题中的应用在其他领域的应用 定义 定义:在数学中,概率单纯形(Probability Simplex)是指在 n n n维空间中,所有分量非负且分量之和为1的向量…

项目练习:Vue2中el-button上的@click事件失效

文章目录 一、问题描述二、解决 一、问题描述 button按钮上绑定了一个click事件 对应的方法写在methods中 但是&#xff0c;测试点击时&#xff0c;无法触发函数 二、解决 1、问题代码 <el-buttonclick"changeConfirm(Y)"type"success"plainicon&qu…

十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言配置

【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言配置 前言准备工作第一步:更新前端 `TestCase` 类型定义第二步:改造 `TestCaseEditView.vue` 表单第三步:修改后端代码中的TestCase模型和序列化器第四步:测试强化后的用例编辑器总结前言 在之前的后端文章…

HTTP连接管理——短连接,长连接,HTTP 流水线

连接管理是一个 HTTP 的关键话题&#xff1a;打开和保持连接在很大程度上影响着网站和 Web 应用程序的性能。在 HTTP/1.x 里有多种模型&#xff1a;短连接、_长连接_和 HTTP 流水线。 下面分别来详细解释 短连接 HTTP 协议最初&#xff08;0.9/1.0&#xff09;是个非常简单的…

MySQL范式和反范式

范式 是用一组规则定义的数据库设计标准&#xff0c;旨在确保数据库结构合理&#xff0c;避免数据冗余和异常。 目的 消除数据的重复&#xff0c;提高存储效率防止数据异常&#xff08;插入、删除、更新异常&#xff09;提高数据的完整性和一致性 第一范式 定义 所有列&am…

编程技能:格式化打印04,sprintf

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;格式化打印03&#xff0c;printf 回到目录…

JavaScript性能优化实战:深入探讨JavaScript性能瓶颈与优化技巧

引言:为什么JavaScript性能至关重要 在现代Web开发中,JavaScript已成为构建交互式应用程序的核心技术。随着单页应用(SPA)和复杂前端架构的普及,JavaScript代码的性能直接影响用户体验、转化率甚至搜索引擎排名。研究表明,页面加载时间每增加1秒,转化率可能下降7%,而性能…

Java数据结构——八大排序

排序 插⼊排序希尔排序直接选择排序堆排序冒泡排序快速排序归并排序计数排序 排序的概念 排序&#xff1a;就是将一串东西&#xff0c;按照要求进行排序&#xff0c;按照递增或递减排序起来 稳定性&#xff1a;就是比如排序中有两个相同的数&#xff0c;如果排序后&#xff0c…

WPF响应式UI的基础:INotifyPropertyChanged

INotifyPropertyChanged 1 实现基础接口2 CallerMemberName优化3 数据更新触发策略4 高级应用技巧4.1 表达式树优化4.2 性能优化模式4.3 跨平台兼容实现 5 常见错误排查 在WPF的MVVM架构中&#xff0c; INotifyPropertyChanged是实现数据驱动界面的核心机制。本章将深入解析属…

低空城市场景下的多无人机任务规划与动态协调!CoordField:无人机任务分配的智能协调场

作者&#xff1a;Tengchao Zhang 1 ^{1} 1 , Yonglin Tian 2 ^{2} 2 , Fei Lin 1 ^{1} 1, Jun Huang 1 ^{1} 1, Patrik P. Sli 3 ^{3} 3, Rui Qin 2 , 4 ^{2,4} 2,4, and Fei-Yue Wang 5 , 1 ^{5,1} 5,1单位&#xff1a; 1 ^{1} 1澳门科技大学创新工程学院工程科学系&#xff0…

解决Java项目NoProviderFoundException报错

前言 在Java开发中&#xff0c;jakarta.validation.NoProviderFoundException 是一个令人困惑的运行时错误&#xff0c;常因校验框架依赖缺失或版本冲突导致。 问题复现&#xff1a;用户注册校验失败 业务场景 开发一个用户注册功能&#xff0c;要求&#xff1a; 校验邮箱…

重构跨境收益互换价值链:新一代TRS平台的破局之道

当香港券商面对内地汹涌的结构化产品需求&#xff0c;一套智能化的TRS系统正成为打开万亿市场的金钥匙 在跨境金融的暗流涌动中&#xff0c;一家中资背景的香港券商正面临甜蜜的烦恼&#xff1a;内地高净值客户对港股、美股的杠杆交易需求激增&#xff0c;但传统TRS业务深陷操作…