簡體   English   中英

在最新的 Spring v4 中使用帶有可選主體的 @RequestBody

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM