StringUtils 常用判斷字串方法與 Java 內建方法比較
Java 內建方法Java 本身提供幾個關於字串的判斷,會因為 null 產生 exception
isEmpty()字串有長度(空白也算)就是 false
1234"".isEmpty(); //true" ".isEmpty(); //false"blank".isEmpty(); //falsenull.isEmpty(); // NullPointerException
isBlank()字串有長度沒文字還是 true
12345"123".isBlank(); //false"".isBlank(); //true" ".isBlank(); //truenull.isBlank(); // NullPointerException
StringUtilsStringUtils 用於處理 String 的,提供了比 Java String 多更多實用方法,且不會因為 null 而產生 exception。屬於 Apache ...
Spring restTemplate 使用方法
Spring restTemplate 使用方法一般來說很多請求的處理多半是透過前端進行,但也免不了有時候後端需要直接發送請求來處理,像是後端需要去特定 api 拿取資源又或是和其他 server 之間的溝通部分很常需要自己發送請求,Spring Boot 也有提供 RestTemplate 這個物件來輕鬆實踐,早期多半使用 Java 原生的 HttpConnectionUrl 來處理,那這次就介紹一下現在比較常用到的幾個常見 RestTemplate 方法。
這邊提供一個開放的 api 可以進行測試 (https://jsonplaceholder.typicode.com),裡面有詳細介紹有哪些路徑可以使用,可以直接用 postman 對特定位置來請求看看。下面介紹就會針對這個 api 進行請求。
getForObject()/postForObject()只想取得回覆的 body,對於其他 header 等資訊不在意,所以 response 裡面只會單純回應對方要回傳的 body
寫一個 Class 來發送請求至 https://jsonplaceholder.t ...
JAVA main()
Java main()12345class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!!"); }}
一個類別只有一個 main 方法並且是整個程式的執行進入點(Entry point)。
封裝等級必須宣告為 public,且只有主類別可以宣告為 public。(預設為 public,所以 public 可省略)
主類別名稱必須與主檔名相同(不含副檔名)。
修飾字的宣告只能宣告為 abstract、final 或省略不寫。
public static void 是固定不可以改變的
名詞解釋public表示方法是公開,可以在這個 class 以外的地方使用
static表示靜態,是描述這個方法的狀態,程式剛開始執行前,就要把這些東西載入到記憶體,main() 方法不需要產生物件(Object)就能被執行,所以它必須是個 “static” 成員
void表示這個方法沒有回傳值,一但 main() ...
JAVA Static
JAVA Staticstatic 靜態作用對象可用來修飾 (類別的屬性、方法或子類別),不能用 static 修飾最上層 Class
定義靜態的意思是,在程式載入記憶體的時候,跟著程式一起在記憶體中佔有空間,而不是主程式開始執行後才跟記憶體要空間。
static 可以想像成程式執行時已經載入到記憶體中,有點類似於全域的概念,Java 中沒有全域性變數的概念。但可以透過 static 實現此目的,可以將變數宣告為靜態並將其用作全域性變數。
範例 1如果物件內定義 static 屬性,就可以使用類名稱訪問靜態變數,不需要建立一個物件來呼叫靜態變數。
1234class Student{ static int id; static String name;}
12345678910public class StaticTesting{ public static void main(String[] args) { Student.id = 1; Student.name = "Sean&qu ...
RabbitMQ 介紹
軟體簡介
著名應用 message Queue (message brokers) 的開源軟體
支持 AMQP 0-9-1 等多種訊息傳遞協定
支援多種語言及插件工具
圖形化介面管理及監控訊息狀態
其他類似軟體 EX: Kafka、AWS SQS…
AMQP 基本架構及名詞解釋AMQP 0-9-1: AMQP (Advanced Message Queuing Protocol)是一種訊息傳遞的協定,具有各個角色實踐訊息傳遞的中間代理。
由 Producer 發佈訊息到 exchange,可以想像成郵局或郵箱。然後依照綁定的規則將訊息發到 Queue(Broker) 。然後 consumer 依照期間監聽(訂閱)的 Queue 將其中訊息取出。
Producer : 發送訊息的程式
Queue:儲存訊息等待接收的緩衝區域,具有 FIFO 特性(先進先出)
Consumer:訊息接收的程式
Exchange:決定將訊息推送至指定位置
Direct:直接丟給指定的 Queue
Topic:設定 binding 規則,丟給符合的 Queue
Fanout:一次丟給全部負責的 Queue
...
Spring MVC Http method 取得請求參數方法
Spring Boot 常使用取得請求的方式:
@RequestParam
@RequestBody
@RequestHeader
@PathVariable
@RequestParam用法:
GET
required = true/false (預設 true),如果是 false 就不用代入但可能會因此有 null 報 exception
defaultValue = xxx,設置預設值,設置後 required 就會被忽略
用途:取得放在 URL 的參數
http:localhost:8080/test1?id=123
12345678910111213@RestControllerpublic class RequestController { @RequestMapping("/test1") public String test1(@RequestParam Integer id, @RequestParam(defaultValue = &qu ...
Rails 套件操作,Devise(google 第三方登入(下))
今天接著安裝完成 'omniauth-google-oauth2'、'omniauth-rails_csrf_protection'這兩個套件之後,我們接續後面的步驟吧。
設定 routes記得之前用 devise 產生的 controller 中有一個 omniauth_callbacks_controller.rb 這個檔案嗎?現在可以拿來用了喔,但我們要告訴 devise 要去使用這個 controller 必須要設定好 routes
1rails g devise:controllers users
如同前面章節有提到,這些產生的 controller 必須要設定好路徑才可以使用喔。如果沒有產生的話可以自己建立 app/controller/users/omniauth_callbacks_controller.rb 到這個路徑。
1devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks ...
Rails 套件操作,Devise(google 第三方登入(上))
相信很多人主要是希望可以透過 devise 來幫忙串接第三方登入,這部分剛好在我們製作專案的時候有順利完成 google 的部分就拿出來分享給大家。
主要步驟
申請 google api 金鑰
專案中 devise 設定檔設定金鑰
裝上 omniauth 套件配合串接 devise
設定 routes
設定 callback controller
設定 model
這篇先針對前面三點進行說明。
申請 google oauth 金鑰先到 google cloud 去申請 oauth 金鑰https://console.cloud.google.com/
點選 oauth 用戶端 id 進入申請頁面
填寫的部分:
應用程式類型選“網頁應用程式”
名稱就自己決定
已授權的 javascript 來源先填上 localhost 的位置 (http://127.0.0.1:3000) or (http://localhost:3000),方便你本機可以進行測試,建議上面兩種都填寫,防止你開 server 連到沒加入金鑰的那個位置,之後上線後記得也補上正式上線的網域。
已授權的重新導向 url ...
進入Rails世界必須懂:Model 關聯性 (N:N)
多對多 N:N關於多對多繼續用飲料店的例子舉例說明,可以想像我們很多間飲料店品牌,有很多飲料品項是相同的或不同,就會有需要有一張第三方表單來記錄:
一間飲料店可以有很多種飲料
store has many drinks
同一種飲料可以被很多間不同的飲料店販賣
drink has many stores
我們可以透過這張表單來知道,哪間店有賣哪些飲料,哪些飲料有被哪些店家販售。他們之間的關係可以透過下面這張圖片看到,虛線的 has many 表示他們並不是真的直接有一對多的關聯,而是需要透過第三方表格來建立多對多關聯。
我們可以建立第三方的表格 drink_invest 來記錄飲料和店家之間的關係rails g model drink_invest store:references drink:references
加上 reference 或是 belongs_to 都可以讓這個表格自動建立出對應的 store_id 及 drink_id 欄位,並且可以:
自動加上索引(index),加快查詢
自動幫 Model 加上 belongs_to
需要建立這樣的第三方表格來 ...
進入Rails世界必須懂:Model 關聯性 (1:N)
1:N 一對多如果我們希望每間商店可以販售許多種飲料,可以使用一對多模式來進行關連。
先建立 Drink 這個 Model:rails g model Drink name price:decimal store_id:integer
目前的資料關聯設計像下圖
先把 model 之間的關聯建立好
drink.rb
123class Drink < ApplicationRecord belongs_to :storesend
store.rb
1234class Store < ApplicationRecord has_many :drinks belongs_to :ownerend
方法建立跟 has_one 一樣,設定 has_many :drinks 後會多了以下幾個方法,belongs_to 建立的方法跟 1:1 是一樣,這邊就不多提:
drinksdrinks=buildcreate
console 測試看看123456789101112131415161718192021222324252627282930313233343536# ...