2017-06-29 81 views
0

我在春季啓動創建一個REST API,目前我有一個映射來獲取用戶和特定用戶的列表。春季啓動REST,只允許一些屬性更新

比方說我的用戶是這樣的:

{ 
    "id": "1", 
    "name": "John", 
    "settings": [ 
     "show_ads": "true", 
     "theme": "cool-black" 
    ] 
    "last_updated": "XXX", 
    "created": "XXX" 
} 

現在我試圖創建污物界面的更新部分。 我該如何解決只允許通過請求主體更新一些字段,但允許在GET路徑中看到?

在這種情況下,我會允許名稱,show_ads和主題由用戶更新。

我在控制器前面使用oauth2進行身份驗證,我只希望管理員能夠更改某些屬性值。

此外,發送更新用戶的請求時,請求正文是否需要正確嵌套?

PUT /users/1 
{"name": "Peter", "show_ads": "false"} (1) 
{"name": "Peter", "settings": ["show_ads": "false"]} (2) 

這兩個都是有效的或只是2號?

+0

發佈您的Java代碼。特別是實體。告訴我們您只想讀取哪些屬性。也在你的json中,你有方括號。他們應該是花括號。我希望這只是一個錯字。 – Strelok

回答

0

兩個HTTP動詞旨在用於更新,PUT and PATCH。 PUT被定義爲冪等的,所以只有完整的更新纔是有效的。 PATCH可用於部分更新。考慮使用E-Tags以避免(部分)更新衝突。

+0

我不認爲這回答了這個問題。 OP想知道他如何防止某些屬性可以更新。例如,假設我有一個'User'實體,並不是每個人都應該能夠編輯他們的用戶名,他如何防止'username'字段被編輯。在'PUT'上使用'PATCH'並不能解決這個問題。 – g00glen00b