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.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency>该项目依赖了spring-boot-starter-json 这个专门用于处理JSON 的Starter。
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-jsonartifactId> <version>2.0.2.RELEASEversion> <scope>compilescope> dependency>
再进入spring-boot-starter-json依赖可以看到,主要依赖的是jackson的库。
<dependency> <groupId>com.fasterxml.jackson.coregroupId> <artifactId>jackson-databindartifactId> <version>2.9.5version> <scope>compilescope> dependency> <dependency> <groupId>com.fasterxml.jackson.datatypegroupId> <artifactId>jackson-datatype-jdk8artifactId> <version>2.9.5version> <scope>compilescope> dependency> <dependency> <groupId>com.fasterxml.jackson.datatypegroupId> <artifactId>jackson-datatype-jsr310artifactId> <version>2.9.5version> <scope>compilescope> dependency> <dependency> <groupId>com.fasterxml.jackson.modulegroupId> <artifactId>jackson-module-parameter-namesartifactId> <version>2.9.5version> <scope>compilescope> dependency>
Jackson2 库是非常流行的处理JSON 的类库。只要将Jackson2 放在classpath 上, Spring Boot应用程序中的任何使用了@RestController 注解的类,都会默认呈现JSON 格式数据的响应。