spring rest風格程式設計

2021-07-11 17:31:06 字數 3620 閱讀 3224



在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 當然依然出錯,於是我們的程式設計師會這樣 好吧,那我就注釋掉整個...