[英]Use @RequestBody with optional body in latest Spring v4
在 Spring 中使用@RequestBody
注釋時,如何在 REST API 調用中使 body 可選?
在 Spring 的最新版本中,如果您使用@RequestBody
注釋,它會使客戶端始終發送正文而不使其成為可選。
我試過@RequestBody (required=false)
但這沒有用,我的請求仍然為空。
如何在不強制要求主體的情況下將請求轉換為正確的必需對象?
例如:
@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
// ...
}
在這里,我想使用 POST 添加員工但沒有正文。 我怎么做? 如果我發送空的正文,Spring 最新版本會拋出錯誤“缺少正文”...
@Santosh,我不確定您指的是哪個必需的論點。 Mike 已經提到他嘗試使用@RequestBody (required=false)
並且請求仍然為空。 也許您可以詳細說明並舉例說明。
@Mike,也許您可以嘗試使用另一個單獨的轉換器來滿足您的目的。
注意:我注意到 Spring v4.1.6 存在同樣的問題,Mike 可能會使用它,因為他提到他使用的是最新版本。
您可以使用java.util.Optional
:
@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Optional<Employee> employee){
// ...
}
我猜您使用的是 3.2 以上的 spring 版本,因為版本存在問題。 @RequestBody 應該有一個必需的參數,以允許請求正文是可選的
看看以下鏈接Spring @RequestBody Anotation
@RequestBody
身體需要和參數所需默認情況下是正確的。 將其指定為 false 將幫助您
需要公共抽象布爾值
是否需要正文內容。 默認為 true ,導致在沒有正文內容的情況下拋出異常。 如果您希望在正文內容為 null 時傳遞 null,請將其切換為 false。
我通過使用@RequestBody(required = false)
解決了這個問題,請參見以下示例:
@PutMapping("approve/{id}")
public void approve(@PathVariable("id") Long id, @RequestBody(required = false) DemoObject demo) {
log.info("demo == null -> " + (demo == null));
}
注意:在前端應用程序中,我放置了空值
this.http.put('approve/' + id, null)
.then((response) => {
...
})
.catch(error => {
...
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.