【笔记】spring的注解回顾,springboot-restful项目结构介绍 springboot-freemarker ⼯程配置详解
注解
學Spring boot有一陣子了,總結一下它的注解。
@Controller :修飾class,?來創建處理http請求的對象
@RestController :Spring4之后加?的注解,原來在 @Controller 中返回json需要 @ResponseBody 來配合,如果直接? @RestController 替代 @Controller 就不需要再配置 @ResponseBody ,默認返回json格式。
@RequestMapping :配置url映射
例子:
實現對User對象的操作接?
進行驗證,使用MockMvc
MockMvc是由spring-test包提供,實現了對Http請求的模擬,能夠直接使用網絡的形式,轉換到Controller的調用,使得測試速度快、不依賴網絡環境。同時提供了一套驗證的工具,結果的驗證十分方便。
接口MockMvcBuilder,提供一個唯一的build方法,用來構造MockMvc。主要有兩個實現:StandaloneMockMvcBuilder和DefaultMockMvcBuilder,分別對應兩種測試方式,即獨立安裝和集成Web環境測試(并不會集成真正的web環境,而是通過相應的Mock API進行模擬測試,無須啟動服務器)。MockMvcBuilders提供了對應的創建方法standaloneSetup方法和webAppContextSetup方法,在使用時直接調用即可。
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = MockServletContext.class) @WebAppConfiguration public class ApplicationTests { private MockMvc mvc; @Before public void setUp() throws Exception { mvc = MockMvcBuilders.standaloneSetup(new UserController()).build(); } @Test public void testUserController() throws Exception { // 測試UserController RequestBuilder request = null; // 1、get查?下user列表,應該為空 request = get("/users/"); mvc.perform(request) .andExpect(status().isOk()) .andExpect(content().string(equalTo("[]"))); // 2、post提交?個user request = post("/users/") .param("id", "1") .param("name", "測試?師") .param("age", "20"); mvc.perform(request) .andExpect(content().string(equalTo("success"))); // 3、get獲取user列表,應該有剛才插?的數據 request = get("/users/"); mvc.perform(request) .andExpect(status().isOk()) .andExpect(content().string(equalTo("[{\"id\":1,\"name\":\"測試?師\",\"age \":20}]"))); // 4、put修改id為1的user request = put("/users/1") .param("name", "測試終極?師") .param("age", "30"); mvc.perform(request) .andExpect(content().string(equalTo("success"))); // 5、get?個id為1的user request = get("/users/1"); mvc.perform(request) .andExpect(content().string(equalTo("{\"id\":1,\"name\":\"測試終極?師\",\"a ge\":30}"))); // 6、del刪除id為1的user request = delete("/users/1"); mvc.perform(request) .andExpect(content().string(equalTo("success"))); // 7、get查?下user列表,應該為空 request = get("/users/"); mvc.perform(request) .andExpect(status().isOk()) .andExpect(content().string(equalTo("[]"))); } }springboot-restful ?程項?結構介紹
springboot-restful ?程項?結構如下圖所示:
org.spring.springboot.controller - Controller 層
org.spring.springboot.dao - 數據操作層 DAO
org.spring.springboot.domain - 實體類
org.spring.springboot.service - 業務邏輯層
Application - 應?啟動類
application.properties - 應?配置?件,應?啟動會?動讀取配置
什么是 REST?
REST 是屬于 WEB ?身的?種架構?格,是在 HTTP 1.1 規范下實現的。Representational State Transfer 全稱翻譯為表現層狀態轉化。Resource:資源。?如 newsfeed;Representational:表現形式,?如?JSON,富?本等;State Transfer:狀態變化。通過HTTP 動作實現。
理解 REST ,要明?五個關鍵要素:
資源(Resource)
資源的表述(Representation)
狀態轉移(State Transfer)
統?接?(Uniform Interface)
超?本驅動(Hypertext Driven)
6 個主要特性:
?向資源(Resource Oriented)
可尋址(Addressability)
連通性(Connectedness)
?狀態(Statelessness)
統?接?(Uniform Interface)
超?本驅動(Hypertext Driven)
CityRestController.java 城市 Controller 實現 Restful HTTP 服務:
@RequestMapping 處理請求地址映射。
method - 指定請求的?法類型:POST/GET/DELETE/PUT 等
value - 指定實際的請求地址
consumes - 指定處理請求的提交內容類型,例如 Content-Type 頭部設置application/json,text/html
produces - 指定返回的內容類型
Springboot 實現 Restful 服務,基于 HTTP / JSON 傳輸,適?于前后端分離
通過 @ApiOperation 注解來給API增加說明、通
過 @ApiImplicitParams 、 @ApiImplicitParam 注解來給參數增加說明。
如上代碼所示,通過 @Configuration 注解,讓Spring來加載該類配置。再通過 @EnableSwagger2 注解
來啟?Swagger2。
再通過 createRestApi 函數創建 Docket 的Bean之后, apiInfo() ?來創建該Api的基本信息(這些
基本信息會展現在?檔??中)。 select() 函數返回?個 ApiSelectorBuilder 實例?來控制哪些接
?暴露給Swagger來展現,本例采?指定掃描的包路徑來定義,Swagger會掃描該包下所有Controller
定義的API,并產??檔內容(除了被 @ApiIgnore 指定的請求)。
@ApiOperation 注解來給API增加說明、通
過 @ApiImplicitParams 、 @ApiImplicitParam 注解來給參數增加說明。
springboot-freemarker ?程配置詳解
pom:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSc hema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd /maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>springboot</groupId> <artifactId>springboot-freemarker</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-freemarker :: Spring Boot 集成 FreeMarker 案例</name> <!-- Spring Boot 啟動?依賴 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.1.RELEASE</version> </parent> <properties> <mybatis-spring-boot>1.2.0</mybatis-spring-boot> <mysql-connector>5.1.39</mysql-connector> </properties> <dependencies> <!-- Spring Boot Freemarker 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <!-- Spring Boot Web 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Test 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot}</version> </dependency> <!-- MySQL 連接驅動依賴 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector}</version> </dependency> <!-- Junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project>然后在 application.properties 中加? FreeMarker 相關的配置:
Freemarker 配置
#?件配置路徑
spring.freemarker.template-loader-path=classpath:/web/
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
spring.freemarker.request-context-attribute=request
spring.freemarker.suffix=.ftl
使用freemarker時非前后端分離,此時的Controller層:
a.這?不是? HTTP + JSON 模式,使?了 @Controller ?不是先前的 @RestController
b.?法返回值是 String 類型,和 application.properties 配置的 Freemarker ?件配置路徑下的各個 *.ftl?件名?致。這樣才會準確地把數據渲染到 ftl ?件??進?展示。
c.? Model 類,向 Model 加?數據,并指定在該數據在 Freemarker 取值指定的名稱。
總結
以上是生活随笔為你收集整理的【笔记】spring的注解回顾,springboot-restful项目结构介绍 springboot-freemarker ⼯程配置详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【笔记】c++中opencv的使用
- 下一篇: 【问题记录】pytorch自定义数据集