SpringBoot學習之Json資料互動

2021-08-18 13:07:31 字數 2543 閱讀 4575

springboot 缺省會使用 json 作為響應報文格式。首先,我們建立乙個 usercontroller 用於處理前端的 web 請求。

定義乙個簡單的控制器,與通常返回 url 的 controller 不一樣的是,login() 使用了 @responsebody 註解,它表示此介面響應為純資料,不帶任何介面展示,可以獲得標準json。

@controller

public

class

usercontroller

return

new respentity(respcode.success, user); //返回的響應實體具體看下節}}

對於上面的**來說,還可以做進一步的優化,由於所有的 restful 介面都只是返回資料,所以我們可以直接在類級別上新增 @responsebody 註解。而大多數情況下,@controller 與 @responsebody 又會一起使用,所以我們使用 @restcontroller 註解來替換掉它們,從而更加簡潔地實現功能。

對於每一家公司來說,都會定義自己的資料規範,乙個統一且標準的資料規範對於系統維護來說是非常重要的,也在很在程度上提公升了開發效率。

介面響應至少需要告訴使用方三項資訊:狀態碼、描述、資料。其中,資料不是每個介面必須的,如果只是乙個簡單修改的動作,可能就沒有必須返回資料了。下面我們定義乙個 respentity類來封裝我們的響應報文model:

public

class

respentity

public

respentity(respcode respcode, object data)

...

}

同時,定義乙個列舉類來維護我們的狀態碼:

public

enum respcode

public

intgetcode

() public string getmsg

()}

這樣,我們的響應資料規範已基本建立。

出於系統健壯性的考慮,我們需要對所有的引數進行必要性校驗,如:登入請求時,如果沒有使用者名稱,程式應該立即駁回該請求。上面請求引數模型(model)的抽象也使得我們對資料校驗更加方便,當然主要還是依賴於 springboot 的 validate 功能的強大支援。

對於登入介面來說,使用者名稱與密碼都是必輸的,那麼我們現在為其新增上對應的引數校驗,無需 if-else 判斷,簡單的幾個註解就可以幫助我們完成所有的工作。

public

class

logincontroller

}----

public

class

requser

@notblank(message = "密碼不能為空")

public string getpassword

() ...

}

我們為請求引數的 model 物件requser 加上了 @valid 註解,並在 model 類中對需要校驗欄位的 get 方法上新增相應的校驗註解。效果如下:

手機號校驗註解 phone:

@constraint(validatedby = phonevalidator.class)

@target()

@retention(retentionpolicy.runtime)

@documented

public @inte***ce

phone ;

class

extends

payload> payload() default {};

}

手機號校驗實現類 phonevalidator:

public

class

phonevalidator

implements

constraintvalidator

");@override

public

void

initialize

(phone phone)

@override

public

boolean

isvalid

(string value, constraintvalidatorcontext constraintvalidatorcontext)

}

model 上的使用:

@phone

public string getusername

()

這樣的話,如果因為某些不可抗拒因素導致校驗規則的變動,只需要修改一處理即可,維護成本大大降低。

springBoot學習之註解小記

controller responsebody restcontroller 當方法或者類上增加了 responsebody註解時,所返回的引數為json格式。當沒有此註解時,引數會以鍵值對的形式傳入。data 提供該類所有屬性的getting和setting方法。cookievalue 用來獲取c...

SpringBoot 學習之Spring篇

scope 描述的是 spring 容器如何新建 bean 的例項的。spring 的scope 有以下幾種,通過 scope 註解來實現。1 singleton 乙個 spring 容器中只有乙個 bean 的例項,此為 spring的預設配置。2 prototype 每次呼叫新建乙個 bean ...

spring boot學習之熱部署

在pom檔案中加入devtools依賴即可,當classpath下的檔案發生了修改 儲存後 就會自動重啟專案 org.springframework.boot spring boot devtools true 當時我看書上就加了這段配置,然後我立馬啟動專案試了下,毫無疑問,沒有成功 idea中配置...