在spring4
中提供了
rest
風格程式設計的介面
rest url
特點:
rest
風格會將引數當成
url的一部分,如在
url
中實際請求為
`/users/1`,1
表示userid
的值。controller
在獲取時,
註解url
對應引數
1部分用
來代替,
/users/
,獲取引數時引數型別前加
@pathvariable
註解來獲取,如
@pathvariable string userid
。restful
使用http
動詞表達對資源的操作型別。|方法
|說明||get
|獲取資源
||post
|建立資源
||put
|更新資源,提供資源所需的所有屬性
||patch
|更新資源,提供乙個或多個將要修改的資源屬性,在一定情況下可替代
put方法
|delete |
刪除資源
|restful
設計中http
方法的安全性和冪等性。|方法
|安全性
|冪等性
||get|是
|是||post|否
|否||put|否
|是||patch|否
|是||delete |否|
是|**安全性
** 安全的方法是唯讀的,不會改變資源的狀態。
**冪等性
** 冪等的方法會修改資源狀態,但多次呼叫不會產生不同的結果。
舉例說明:
get
方法不會對資源造成修改所以是安全的,同時也是冪等的。
delete
方法對資源進行刪除,不是安全的,但刪除後再次呼叫時已經刪除了,不會產生不同後結果,所以是冪等的。
post
方法會建立乙個資源,不是安全的,多次呼叫會建立多個資源,所以不是冪等的。
|狀態碼|適用
http方法|
說明||200 ok|get/put/patch|
操作成功
||201 created|post|
建立成功
||204 no content|delete|
刪除成功
||400 bad request|*|
請求url
引數或請求體包含錯誤引數
||401 unauthorized|*|
當前請求需要驗證身份驗證,需要有效
`authorization`頭|
|403 forbidden|*|
身份已驗證,但沒有相應許可權
||404 not found|*|url
所指資源不存在
||405 method not allowed|*|url
不支援當前請求的方法
||406 not acceptable|post/put/patch|
伺服器不支援請求體的
`content-type`|
|500 internal sever error|*|
伺服器出現了不可預料的錯誤
|異常處理:
spring
中提供了
@controlleradvice
和@exceptionhandler
註解配合使用。需要單獨寫乙個類,在這個類上使用
@controlleradvice
註解,表示該類用於處理丟擲的異常。該類上可以寫若干個方法,每乙個方法處理乙個異常,
每個方法要加
@exceptionhandler
註解,值為異常的
class
物件,表示處理該異常
。方法可以返回乙個
map型別的
json
物件,加
@responsebody
註解即可。
rest
響應:
對於狀態碼以及響應體的返回,
spring4.0
中提供了乙個介面
responseentity
。如果只返回狀態碼,可以用
。如果需要返回響應體,則可以使用
。其他詳細使用方法可以參照
spring4api
。傳資料時都是用
json
格式來傳送的。可以
controller
類上加@restcontroller
註解(spring4.0
新加的註解
),該註解被
@controller
和@responsebody
註解。這樣方法上就不用加
@responsebody
註解了。
@jsonview介紹
在向前端返回
json
資料時,可以使用
jackson
的註解來自定義
json
@jsonview
,可以用來註解屬性,方法。這個註解需要配合使用,也就是說必須是成對出現的。例如:
首先需要建
view
介面public inte***ce withoutpassword{}
public inte***ce withpassword extends withoutpassword{}
在實體中屬性上新增
@jsonview
註解,需要使用上面定義的介面
@jsonview(withoutpassword.class)
private string username;
@jsonview(withpassword.class)
private string password;
而在controller
方法中,如果要求只返回
username
,則可以在方法上新增
@jsonview(withoutpassword.class)
,這樣序列化物件時,
password
欄位就不會被序列化。
這裡有乙個約定,就是
controller
方法上的
@jsonview
使用的檢視可以允許該檢視或者父檢視(父介面)註解的字段被序列化。上面的例子中,
withpassword
是withoutpassword
的子介面,所以沒有被序列化。
注意,檢視介面是自定義的介面,且需要自己組織好繼承關係,以方便自定義序列化。
@jsonignore
如果想直接不讓乙個字段序列化,可以在該字段上新增這個註解,這個註解預設值是
true
,表示序列化時忽略該欄位。
@jsonproperty
可以指定該欄位序列化成
json
格式時的名字
Spring REST 配置CSRF防護
內容從以下幾個方面展開 1.什麼是csrf csrf 攻擊簡單來說,是多tab頁面瀏覽器的乙個安全漏洞,比如你正在訪問a 此時如果瀏覽器有你的cookie,並且session沒有過期,此時你去訪問b 那麼b 可以直接呼叫a 的介面,而a 則認為是你本人進行的操作。以下是圖示 2.如何進行防禦 對cs...
物件導向程式設計風格 基於物件程式設計風格
本文主要通過實現thread 類來展現兩種程式設計風格的不同點。很多人沒有區分 物件導向 和 基於物件 兩個不同的概念。物件導向的三大特點 封裝,繼承,多型 缺一不可。通常 基於物件 是使用物件,但是無法利用現有的物件模板產生新的物件型別,繼而產生新的物件,也就是說 基於物件 沒有繼承的特點。而 多...
各種程式設計風格
在過去的n年中,我遇到了很多使用囧然不同風格的開發者,下面是我所知道的一些,你還知道其它的嗎?散彈槍程式設計 這種程式設計風格是一種開發者使用非常隨意的方式對待 嗯,這個方法呼叫出錯了 那麼我會試著把傳出的引數從false變成true 當然依然出錯,於是我們的程式設計師會這樣 好吧,那我就注釋掉整個...