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

时间:2023-02-23 17:55: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为自带的容器依赖。

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

二、控制器

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

【企业云端全栈开发实践-2】Spring Boot Controller
从数据库中加载的数据先封装到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面向对象的特性,很多信息需要放到创建的对象中
【企业云端全栈开发实践-2】Spring Boot Controller
然后再entity实体层,创建好对应的元素、get、set方法即可。如下图所示:

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

【企业云端全栈开发实践-2】Spring Boot Controller
前端以application/json的格式时,是花括号括起来的。
此时后端如果要接收json类型的数据,需要加上**@RequestBody**类型的注解。

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