基於SpringBoot開發一套完整的專案(二)準備工作
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 格式資料的響應。