1.SpringBoot框架内容
想了一下,觉得在开发之前应该先大致了解一下springboot框架的概括,然后在后面的开发过程中再进一步加深理解,做到知其然知其所以然!
Spring Boot 是基于Spring 框架技术来构建的,所以Spring Boot 又会使用很多Spring 框架中的技术。要了解springboot不可避免的我们要了解好spring框架。
Spring 框架是模块化的,允许用户自由选择需要使用的部分。Spring 框架支持声明式事务管理,并支持多种选择来持久化用户的数据,它提供了一个全功能的Spring MVC 及Spring WebFlux 框架。
简单说一下Spring MVC,MVC 由以下三部分组成
①模型( Model ):应用程序的核心功能,管理这个模块中用到的数据和值。
②视图( View ): 视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观。
③控制器(Controller):对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。、
Spring MVC 使用 @Controller 或 @RestController 注解的 bean 来处理传人的HTTP 请求。使用@RequestMapping 注解将HTTP 请求映射到相应的控制器中的方法。
MVC不是三层架构,而是三层架构中的表现层。
而Spring Boot 提供了适用于大多数应用程序的Spring MVC 的自动配置。
①包含ContentNegotiatingViewResolver bean 和BeanNameViewResolver bean 。
②支持静态资源的服务,包括对WebJars 的支持。
③自动注册Converter 、GenericConverter 、Formatter 等bean。
④支持HttpMessageConverterrs。
⑤自动注册MessageCodesResolver。
⑥支持静态index.html。
⑦支持自定义Favicon。
⑧自动使用ConfigurableWebBindingInitializer bean。
默认情况下, Spring Boot 将从类路径或ServletContext 的根中名为/static 、/public 、/resources 、/META-INF/resources 的目录下加载静态内容,它使用SpringMVC 中的ResourceHttpRequestHandler来实现,但也可以通过 spring.mvc.static-path-pattern来调整。例如:
模板引擎
对于动态HTML 内容的展示,对于Spring Boot 而言,它支持FreeMarker 、Groovy 、Thyme leaf、Mustache 等引擎的自动配置功能。
由于Thymeleaf “原型即页面”,能够让前后端分离,所以在后面我也是使用Thymeleaf。
接下来将演示如何使用Spring MVC 来处理JSON 格式的数据,JSON (JavaScript Object Notation )是一种轻量级的数据交换格式, 具有良好的可读和便于快速编写的特性。
演示
在hello-world 项目源码的基础上创建一个demoUserJson项目作为演示;
创建实体User和UserController
代码如下:
User实体类:
package com.duxihu.helloworld.domain; public class User { private Long id;//唯一标识 private String name; private Integer age; public User() {//无参默认构造器 } public User(Long id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
UserController
package com.duxihu.helloworld.controller; import com.duxihu.helloworld.domain.User; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/user") public class UserController { @RequestMapping("/{id}") public User getUser(@PathVariable("id") Long id){ return new User(id,"duxihu",25); } }运行项目后,在浏览器里访问 localhost:8080/user/1接口,返回的是JSON 类型数据。
为什么没有做任何特殊设置,User可以被自动转成JSON 格式?
进入下面的spring-boot-starter-web依赖可以看到
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>该项目依赖了spring-boot-starter-json 这个专门用于处理JSON 的Starter。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> <version>2.0.2.RELEASE</version> <scope>compile</scope> </dependency>
再进入spring-boot-starter-json依赖可以看到,主要依赖的是jackson的库。
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jdk8</artifactId> <version>2.9.5</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.9.5</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-parameter-names</artifactId> <version>2.9.5</version> <scope>compile</scope> </dependency>
Jackson2 库是非常流行的处理JSON 的类库。只要将Jackson2 放在classpath 上, Spring Boot应用程序中的任何使用了@RestController 注解的类,都会默认呈现JSON 格式数据的响应。