3 回答

TA貢獻1936條經(jīng)驗 獲得超7個贊
根據(jù)HTTP 規(guī)范,您應(yīng)該始終擁有一個狀態(tài)為 200 的正文。
10.2.1 200 正常
請求已成功。響應(yīng)返回的信息取決于請求中使用的方法,例如:
GET 在響應(yīng)中發(fā)送與請求的資源對應(yīng)的實體;
HEAD 請求資源對應(yīng)的實體頭字段在響應(yīng)中發(fā)送,不帶任何消息體;
POST 描述或包含操作結(jié)果的實體;
TRACE 包含終端服務(wù)器收到的請求消息的實體。
您應(yīng)該改用狀態(tài) 204(無內(nèi)容),它不帶正文參數(shù)。
10.2.5 204 無內(nèi)容
服務(wù)器已完成請求,但不需要返回實體主體,并且可能希望返回更新的元信息。響應(yīng)可能包括實體頭形式的新的或更新的元信息,如果存在,應(yīng)該與請求的變體相關(guān)聯(lián)。
如果客戶端是用戶代理,它不應(yīng)該改變導(dǎo)致請求被發(fā)送的文檔視圖。這個響應(yīng)主要是為了允許輸入動作發(fā)生而不導(dǎo)致用戶代理的活動文檔視圖發(fā)生變化,盡管任何新的或更新的元信息應(yīng)該應(yīng)用于當(dāng)前在用戶代理的活動視圖中的文檔。
204 響應(yīng)不能包含消息體,因此總是由頭字段之后的第一個空行終止。
transactionNotesService.delete(Long.valueOf(id)); return ResponseEntity.noContent().build();

TA貢獻1817條經(jīng)驗 獲得超14個贊
這里的問題是您混淆了 ResponseEntity.ok() 和 ResponseEntity.ok(T t) 其中 t 是您希望返回的內(nèi)容。
如果 transactionNotesService.delete 或 notFound().build 具有 void 作為返回類型,那么您不能將它們用作返回值,因為它們沒有值。我猜你的意思是這樣的:
@DeleteMapping("remove/{id}")
public ResponseEntity<?> remove(@PathVariable String id) {
transactionNotesService.delete(Long.valueOf(id));
return ResponseEntity.noContent();
}

TA貢獻1815條經(jīng)驗 獲得超13個贊
在您的情況下,您可能會返回 200 或 204(202 用于異步/正在進行的刪除),如MDN 文檔所述:
如果成功應(yīng)用 DELETE 方法,則可能有幾個響應(yīng)狀態(tài)代碼:
如果操作可能會成功但尚未執(zhí)行,則為 202(已接受)狀態(tài)代碼。
204(無內(nèi)容)狀態(tài)代碼,如果已執(zhí)行操作且無需提供更多信息。
200(OK)狀態(tài)碼,如果動作已經(jīng)執(zhí)行并且響應(yīng)消息包含描述狀態(tài)的表示。
對于204
你想要的是:
return ResponseEntity.noContent().build();
例如200
,您想要的是:
return ResponseEntity.ok("Entity deleted");
代碼更改返回204
在您的實際代碼中,該orElseGet()
部分不應(yīng)編譯,因為ok()
不返回Optional
.
要處理客戶端傳遞的 id 與任何現(xiàn)有實體沒有任何匹配的情況,您可以捕獲EmptyResultDataAccessException
由JpaRepository.deleteById()
.
例如 :
@DeleteMapping("remove/{id}")
public ResponseEntity<?> remove(@PathVariable String id) {
try{
transactionNotesService.delete(Long.valueOf(id));
return ResponseEntity.noContent().build();
}
catch (EmptyResultDataAccessException e){
return ResponseEntity.notFound().build();
}
}
添加回答
舉報