前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【企业云端全栈开发实践-2】Spring Boot Controller

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

作者头像
程序员洲洲
发布2024-06-07 12:35:45
640
发布2024-06-07 12:35:45
举报
文章被收录于专栏:项目文章项目文章

一、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为自带的容器依赖。

代码语言:javascript
复制
<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模板引擎结合使用的。 如下代码:
代码语言:javascript
复制
@Controller
public class HelloController{
	@RequestMapping("/hello")
	public String index(ModelMap map){
	map.addAttribute("name","zhangsan");
	return "hello";
	}
}

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

2、@RestController

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

代码语言:javascript
复制
@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等类型的数据。

如下代码所示:

代码语言:javascript
复制
//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**类型的注解。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Web入门
  • 二、控制器
    • 1、@Controller
      • 2、@RestController
        • 3、路由映射
          • 4、Method匹配
            • 5、参数传递
              • 6、entity实体层
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档