2017-08-10 83 views
0

有什麼辦法來驗證彈簧啓動修補程序請求主體?驗證修補程序請求主體 - 彈簧啓動

Ex: 
[ 
    {"op": "replace", "path": "/id", "value": "foo"}, 
    {"op": "replace", "path": "/id2", "value": "foo2"} 
] 

如果任何用戶以「op」(field)作爲「xx」和「path」(field)發送請求爲「se」。有沒有什麼辦法來驗證它,並拋出400(壞請求),而不改變合同?

+0

這是不是真的我清楚。您是否編寫了自己的REST控制器?你想驗證''op「'是一個特定的值(例如''替換''但不是'」xx「')? 「沒有改變合同」是什麼意思?你的要求是身體結構合同嗎? – g00glen00b

+1

你可以通過這篇文章:http://www.baeldung.com/spring-data-rest-validators – SkyWalker

+0

@ g00glen00b是的。我是指請求主體。 在我的問題中,我指的是「op」字段而不是「op」值(「替換」) –

回答

2

我嘗試了很多方法來解決這個問題。但最後不得不採用這個解決方案。

我的補丁請求籤名:

public void patch(@RequestBody List<PatchOperation> operations) 

我創建了一個簡單的函數來驗證有效的補丁程序鍵出現在請求。

void validatePatchOperation(PatchOperation patchOperation) { 
    if (patchOperation.getOp() == null) { 
     throw new BadRequestException(); 
    } 
    if (patchOperation.getPath() == null) { 
     throw new BadRequestException(); 
    } 
    if (patchOperation.getValue() == null) { 
     throw new BadRequestException(); 
    } 
} 

而且用這種內部的for-each