一、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**类型的注解。