1. 程式人生 > >基於SpringBoot開發一套完整的專案(二)準備工作

基於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 格式資料的響應。