--- title: Spring tags: Spring --- # Spring Core Project ## Spring Core :::spoiler ::: ## Spring Web :::spoiler ### Spring Web MVC * 透過 Servlet 處理 ### Spring Webflux ::: ## Spring AOP :::spoiler * 可將 Security 抽出,在 Method 加上註解 @PreAuthorize("hasRole: ('admin')") 做權限控管,不需另外在各個 Module 判斷身分。 ::: ## Spring Integration :::spoiler ### MQTT 1. dependency 加入 pom.xml ``` <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> </dependency> ``` 2. 建立必要的 bean [官方文件範例](https://github.com/spring-projects/spring-integration-samples) ### RestController * @RestController = @Controller + @ResponseBody * @RequestBody - 收到 JSON 後反序列化為物件。 ### OpenAPI ( Swagger-ui ) * 加入 pom.xml ``` <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> </dependency> ``` #### Entity * Entity Class 可加上註解 `@ApiModel(description = "Entity")` 定義顯示於文件的物件名稱。 * 在 Entity 的屬性加上 `@Schema(required = true)`,可於文件內提示該項為 Required Params。 #### Controller * API Method 加上 ``@Operation(summary = "API 名稱", description = "API 描述")`` 定義顯示於文件的 API 名稱及描述。 ### 發送 Http Request * Spirng 可使用 RestTemplate 使用預設值發送 Http Request,減少繁瑣的 Request 設定 ( 建立連線, 定義 Headers 等 )。 ``` RestTemplate restTemplate = new RestTemplate(); // 回傳完整 Response Entity,可使用 getBody() 取得內容。 restTemplate.getForEntity(url, {entity.class}); // 僅回傳 Response Body restTemplate.getForObject(url, {entity.class}); ``` ::: ## Spring Testing :::spoiler ### Unit Testing * 透過 DI 完善測試,如要測試的 Unit 會透過收到變數的某一項屬性作為條件判斷,因不是依賴於 Unit 本身的內容,所以測試時只要模擬變數的屬性值即可達到符合各項條件判斷,達到專注於 Unit 的驗證。 ### Integration Testing * Spring 提供良好的環境還原能力,如測試時新增了一些資料到 DB,測試結束後會自動清除。 ::: # Spring Main Project ## Spring Cloud :::spoiler ::: ## Spring Security :::spoiler :::