我目前遇到了Spring中的@RequestBody
註釋問題。我目前已將所有驗證註釋正確設置在我的模型上,並且在對象被POST時它們工作得很好。即使發佈的請求主體完全爲空或爲空的對象「{}」,一切都按預期工作。當有人試圖發佈「null」的請求主體時,問題就出現了。這不知何故通過@Valid
批註,並且沒有捕獲,導致NullPointerException
當我嘗試訪問該對象。下面我粘貼了我的控制器片段。空的請求體沒有被Spring @RequestBody @Valid註解捕獲
@Secured({ ROLE_ADMIN })
@RequestMapping(method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE })
public HttpEntity<Resource<Item>> addItem(@RequestBody @Valid Item item) throws Exception {
Resource<Item> itemResource = this.itemResourceAssembler.toResource(this.itemService.save(item));
return new ResponseEntity<Resource<Item>>(itemResource, HttpStatus.CREATED);
}
我在做一些itemService.save()
檢查是否存在於數據庫中的項目已經,因爲這是被用作更新插入。當我訪問通過保存的項目時,我得到NullPointerException
,因爲項目爲空。我試過使用@RequestBody
的「必需」參數,但只檢查是否有東西發佈。如上所述,只有當用戶張貼「null」而沒有引號作爲請求主體時,纔會傳遞null項。有沒有一個自動的Spring註釋或配置來阻止這個null傳遞,或者我應該把if(item == null) throw new Exception();
放在所有可能出現這種情況的控制器中?
謝謝你rkaltreider這實際上工作完美。 – Zasrin