【企业云端全栈开发实践-2】Spring Boot Controller

news2024/11/24 3:28:47

本节目录

  • 一、Web入门
  • 二、控制器
    • 1、@Controller
    • 2、@RestController
    • 3、路由映射
    • 4、Method匹配
    • 5、参数传递
    • 6、entity实体层

一、Web入门

Spring Boot将传统Web开发的mvc、json、tomacat等框架整合,提供了spring-boot-starter-web组件,简化了Web的应用配置。

创建SpringBoot项目勾选Spring Web选项之后,将会自动的将spring-boot-starter-web组件加入到项目之中。

spring-boot-starter-web启动器主要包括了web、webmvc、json、tomcat等基础依赖组件,作用是提供web开发场景所需要的所有底层依赖。

webmvc为web开发的基础框架,json为json数据解析组件,tomcat为自带的容器依赖。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

二、控制器

什么是控制器,这个是MVC模式中的一个东西。
其中M是Model,用来存储数据和封装数据,Controller就是控制器,用来协调和控制。
View是视图,用来显示数据。

在这里插入图片描述
从数据库中加载的数据先封装到Model上,然后通过Controller控制器绑定到View视图上,视图就理解为HTML页面即可,然后View显示在浏览器上。

控制器一个是接收用户HTTP请求,然后控制器去取数据,最终把数据交给视图,视图响应给用户。

Spring Boot提供了@Controller和@RestController两种注解来标识此类负责接收和处理HTTP请求。

如果请求的是页面和数据,使用@Controller注解即可,如果只是请求数据,则可以使用@RestController注解即可。

1、@Controller

  • Controller通常与Thymeleaf模板引擎结合使用的。
    如下代码:
@Controller
public class HelloController{
	@RequestMapping("/hello")
	public String index(ModelMap map){
	map.addAttribute("name","zhangsan");
	return "hello";
	}
}

上述示例中返回了hello页面和name的数据,在前端页面中可以通过${name}参数获取后台返回的数据并进行显示。

2、@RestController

默认情况下,@RestController注解将会返回的对象数据转换为JSON格式。

@RestController
public class HelloController{
	@RequestMapping("/user")
	public User getUser(){
		User user = new User();
		user.setUsername("zhangsan");
		user.setPassword("123");
		return user;
	}
}

3、路由映射

控制器通过路由映射接收前端的请求:

  • @RequestMapping注解主要负责URL的路由映射。可以添加在Controller类或者具体的方法上。
  • 如果添加在Controller上,则这个Controller中的所有的理由映射都将会加上此规则映射,如果添加在方法上,则只针对当前的方法生效。
  • @RequestMapping注解包含很多属性参数来定义HTTP的请求映射规则。
    (注意与@RestController区分。)

常用的属性参数如下:
1、value:请求URL的路径,支持URL模板、正则表达式。
2、method:HTTP请求方法。
3、consumes:请求的媒体类型(Content-Type),如application/json
4、produces:响应的媒体类型。
5、params,headers:请求的参数及请求头的参数值。

  • value属性用于匹配URL映射,value支持简单表达式。
  • 如RequestMapping(“/user”)
  • 支持使用通配符匹配URL,用于统一映射某些URL规则类似的请求:@RequestMapping(“/getJson/*.json”),当在浏览器中请求getJson/a.json时,都会匹配到后台的Json方法。
  • 通配符匹配非常简单使用,支持“*”和“?”“**”等都行。
  • *表示任意字符,两个星号表示匹配任意路径,?表示匹配单个字符。
  • 有通配符的优先级低于没有通配符的。有两个星的低于一个星*的。

4、Method匹配

HTTP请求Method有GET、POST、PUT、DELETE等方式。HTTP支持的全部Method。

如:@RequestMapping(value=“/getdata”,method = RequestMethod.GET)

也可以使用@GetMapping、PostMapping等注解替代。

5、参数传递

@RequestParam将请求参数绑定到控制器的方法参数上,接收的参数来自HTTP请求体或者请求url的QueryString,当请求的参数名称与Controller的业务方法的参数名称一致时,@RequestParam可以省略。

@PathVaraible:用来处理动态的URL,URL的值可以作为控制器中处理方法的参数。

@RequestBody接收的参数示来自requestBody中,即请求体。一般用于处理非Content-Type:application/x-www-from-urlencoded编码格式的数据,比如‘application/json’、application/xml等类型的数据。

如下代码所示:

//http://localhost:8080?nickname=zhangsan
	@RequestMapping("value="/hello",method=RequestMethod.GET)
	public String hello(String nickname){
	return "nihao"+nickname;
	//多个参数的时候使用&符号拼接起来即可。如&phone
	//这个就是上述中的当请求的参数名称与Controller的业务方法的参数名称一致的时候,@RequestParam可以省略的。如果nickname和我们String name不一致的话那就不行了。只有一致时才能省略。
	应该这么写:
	public String gettest(@RequestParam("nickname") String name){
	//但这么写时,nickname是必须要要传递的,如果前端不传递,那么这个方法是不会响应的!
	//如果希望可选参数,那么可以如下:
	public String gettest(@RequestParam("nickname") ,required = false,String name){
	}

6、entity实体层

根据Java面向对象的特性,很多信息需要放到创建的对象中
在这里插入图片描述
然后再entity实体层,创建好对应的元素、get、set方法即可。如下图所示:

需要注意的是,实体层类里面的属性的名称必须和前端传过来的属性名称是一致的,这样就会自动封装到对象参数里面去。

在这里插入图片描述
前端以application/json的格式时,是花括号括起来的。
此时后端如果要接收json类型的数据,需要加上**@RequestBody**类型的注解。

在这里插入图片描述

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

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

相关文章

一条推送的背后运营逻辑

每天我们的手机都收到大量信息&#xff0c;大多来自各APP的推送。每收到一条推送&#xff0c;不只是收到了一串简单的文字&#xff0c;背后还有一系列的隐藏逻辑。几年前我也做过“推送背后的女人”……&#xff08;其实就是干过APP消息推送运营啦~^^~&#xff09;今天就来分享…

【Java 面试合集】String, StringBuffer和StringBuilder 之间的不同

String&#xff0c; StringBuffer和StringBuilder 之间的不同 1. 概述 嗨&#xff0c;大家好【Java 面试合集】又来了&#xff0c;今天我们分享的主题是String&#xff0c; StringBuffer和StringBuilder 之间的不同。 大家别看这个知识点不难&#xff0c;但是里面的细知识很多…

利用Python实现局部异常因子(LOF)的计算

1 LOF算法 局部异常因子(Local Outlier Factor&#xff0c;LOF)算法是目前比较常用的离群点检测算法&#xff0c;该算法通过一种模糊的手段来判断数据对象是否为异常点。 对象ppp的kkk距离&#xff1a;在数据集DDD中&#xff0c;将对象ppp与距其第kkk远的对象ooo之间的距离定义…

(二十四)、实现评论功能(4)【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1&#xff0c;创建reply回复页面 1.1 在comment-item子组件中添加click <view class"comment-item" click"goReply">1.2 methods中添加点击跳转回复页面的方法 //跳转去回复页面goReply() {uni.navigateTo({url: "/pages/reply/reply"})}…

Linux 基础知识之权限管理

目录一、权限的认识二、用户切换三、文件权限1.三类文件访问者2.文件权限类型3.文件访问权限4.文件权限值表示一、权限的认识 权限是对用户所能进行的操作的限制&#xff0c;如果不对用户作出限制&#xff0c;那么碰到恶意用户&#xff0c;就会损害其他用户的利益。 Linux是多用…

最新文件快递柜系统网站源码-Fastapi+Sqlite3+Vue2+ElementUI-简洁好用

## 主要特色 - [x] 轻量简洁:Fastapi+Sqlite3+Vue2+ElementUI - [x] 轻松上传:复制粘贴,拖拽选择 - [x] 多种类型:文本,文件 - [x] 防止爆破:错误次数限制 - [x] 防止滥用:IP限制上传次数 - [x] 口令分享:随机口令,存取文件,自定义次数以及有效期 - [x] 匿名分享:无…

机器学习算法竞赛实战:如何看到机器学习竞赛问题?

机器学习算法竞赛实战-竞赛问题建模 更新《机器学习算法竞赛实战》一书的阅读笔记&#xff0c;更多详细的内容请阅读原书。本文的主要内容包含&#xff1a; 竞赛问题的3个主要部分-如何理解竞赛问题机器学习的样本选择如何线下评估模型实战案例 公众号&#xff1a;尤而小屋作…

scheduling Request(SR)

欢迎关注同名微信公众号“modem协议笔记”。 UE上报BSR&#xff0c;期望网络参照BSR&#xff0c;下发UL grant给UE以便发送UL data&#xff0c;正常情况下&#xff0c;整个过程都会比较顺利。但是世事难料&#xff0c;网络难免有自己的小脾气或者发送BSR不太顺畅&#xff0c;导…

通过Buildroot自制根文件系统

前言根文件系统是Linux内核启动之后读取的一个文件系统&#xff0c;并从这个文件系统中加载第一个init应用程序并启动&#xff0c;就是Linux上俗称的root进程、根进程制作它的方式有很多&#xff0c;例如busybox、yocto&#xff0c;但是这两个方式有缺点&#xff0c;第一个是bu…

JVM级别内存屏障如何禁止指令重排序的

承接上文证明CPU指令是乱序执行的当多个cpu访问同一份数据的时候怎么保证数据的一致性&#xff1f;在最底层级别的控制有好多种&#xff1a;第一种叫关中断&#xff0c;就是访问任何数据的时候必须有一个中断信号量的存在。很多传统的cpu就是靠它实现的&#xff0c;从内存读东西…

高速风筒的IPM模块解决方案

高速吹风筒是利用高转速产生的大风量来快速吹干头发&#xff0c;同时&#xff0c;高转速也使得电机与叶轮的体积缩小&#xff0c;便于设计出灵巧便携的外形。12万转的高速风筒的整体解决方案&#xff0c;满足高速吹风筒的所有应用场景&#xff0c;让客户用芯能的功率器件能更快…

PMP认证的PDU是什么?

PDU&#xff08;Professional Development Units&#xff09;即专业发展单元&#xff0c;是指您获取认证后&#xff0c;就项目管理专业进行学习、授课、或提供志愿服务的累积时间&#xff0c;以小时为单位&#xff0c;1小时即累积1个PDU。自证书获取日起&#xff0c;以三年为A周…

Ansible 多机自动化工具 初学笔记

此文档仅张聪明同学个人笔记&#xff1b;新负责KTH-RPL Cluster GPU的漫漫学习长路 English Docs: official https://docs.ansible.com/ansible/latest/index.html 中文相关文档&#xff1a; https://ansible.leops.cn/basic/Quickstart/https://blog.csdn.net/xinshuzhan/a…

java基础学习 day44(多态的优点和劣势)

1. 多态的优势 在多态形式下&#xff0c;右边对象可以实现解耦合&#xff08;即之后的代码与右边的子类对象不绑定&#xff0c;在更改子类对象后&#xff0c;之后的代码仍可以使用&#xff09;&#xff0c;便于扩展和维护在定义方法的时候&#xff0c;使用父类型作为参数&…

北京/东莞/广州/深圳2023年上半年软考(中/高级)报名>>>

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

TCP/IP体系结构、Socket、进程PID、端口Port

计算机网络小结 一、TCP/IP体系结构 首先OSI参考模型&#xff0c;OSI将网络分为七层&#xff0c;自下而上分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP体系结构则将网络分为四层&#xff0c;自下而上分别是网络接口层、网络层、传输层、应用…

(二十五)、实现评论功能(5)【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1&#xff0c;实现二级回复的入库操作 1.1 两个子组件&#xff08;comment-item和comment-frame&#xff09;与父组件reply之间的属性传值 comment-item&#xff1a; props: {item: {type: Object,default () {return {}}}},comment-frame&#xff1a; props: {commentObj: {…

LoRaWAN模块在车辆跟踪定位中的应用

目前 GPS已经在资产的管理中得到了越来越多的运用&#xff0c;如车辆跟踪、车队跟踪、资产监控等&#xff1b;人员跟踪&#xff0c;宠物跟踪&#xff0c;等等。在所有追踪装置中&#xff0c;最重要的是它的电池期望和监视距离。鉴于 LoRaWAN的功率消耗很小&#xff0c;而且能在…

Allegro如何快速检查走线是否跨分割操作指导

Allegro如何快速检查走线是否跨分割操作指导 在做PCB设计的时候,信号线跨分割的情况需要尽量避免,尤其是信号速率较高的情况,Allegro可以快速的检查PCB上哪个位置跨分割了,并且以高亮的形式报出来,类似下图 TOP层走线跨了L2层参考层空洞, 如何检查,具体操作步骤如下 点…

ArkUI实战,自定义饼状图组件PieChart

本节笔者带领读者实现一个饼状图 PieChart 组件&#xff0c;该组件是根据笔者之前封装的 MiniCanvas 实现的&#xff0c; PieChart 的最终演示效果如下图所示&#xff1a; 饼状图实现的拆分 根据上图的样式效果&#xff0c;实现一个饼状图&#xff0c;实质就是绘制一个个的实…