4 回答

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
通常你不會(huì)用@ResponseStatus. 相反,您可以用作ResponseEntity<...>方法的返回類型。如果退貨的“類型”可以改變,ResponseEntity<?>或者ResponseEntity<Object>也可以工作。
例如:
@GetMapping("/{key}")
public ResponseEntity<Thing> getThing(final @PathVariable String key) {
final Thing theThing = this.thingService.get(key);
final ResponseEntity<?> response;
if (theThing.someProperty()) {
response = ResponseEntity.ok(theThing);
} else {
response = ResponseEntity.status(HttpStatus.NOT_MODIFIED).body(null);
}
return response;
}

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
要直接回答你的問題,@ResponseStatus
不能用于通過單一方法發(fā)送不同的狀態(tài)。
如果你想使用@ResponseStatus
,你如何處理多個(gè)狀態(tài)是:
@ResponseStatus
用所需的2xx 注釋控制器方法HttpStatus
。在成功場景中,此狀態(tài)將由控制器方法發(fā)送。通常它用于設(shè)置200HttpStatus
以外的值(如201),因?yàn)榧词共皇褂?strong>200也是默認(rèn)發(fā)送的狀態(tài)。@ResponseStatus
有帶有注釋的異常處理程序方法
@ExceptionHandler
,以處理不同的異常場景,也帶有@ResponseStatus
相應(yīng)的注釋HttpStatus
。例如,如果您想處理資源未找到的情況,則可以對(duì)異常處理程序方法進(jìn)行注釋@ResponseStatus(HttpStatus.NOT_FOUND)
以發(fā)回404。如果您不需要發(fā)送動(dòng)態(tài)錯(cuò)誤響應(yīng),您甚至可以將自定義異常類與
@ResponseStatus
required 一起標(biāo)記HttpStatus
,當(dāng)異常被拋出(而不是明確地捕獲和吞噬)時(shí),HttpStatus
將返回相應(yīng)的異常。
您甚至可以利用ResponseEntity
which 有一個(gè)方法,您可以在控制器方法或異常處理程序方法中status
傳遞所需的并返回,如下所示:HttpStatus
控制器方法:
@GetMapping("/resource")
public ResponseEntity<Object> getResource(){
if(resourcePresent){
return new ResponseEntity(resource, HttpStatus.OK);
} else {
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
}
}
異常處理方法:
@ExceptionHandler(BadRequestException.class)
public ResponseEntity<Object> handleBadRequestException(BadRequestException exception){
return new ResponseEntity<>(customResponse, HttpStatus.BAD_REQUEST);
}

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
我不確定這是否會(huì)回答你的問題,但你可以拋出一個(gè)ResponseStatusException
你需要的狀態(tài)代碼。但是將它用于 200 會(huì)很奇怪。

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
您不能使用 @ResponseStatus 根據(jù)分支結(jié)果從一種方法設(shè)置不同的狀態(tài)代碼。
您將不得不返回一個(gè) ResponseEntity 或直接在您的方法中操作 HttpServletResponse(或者最終在異常處理程序返回狀態(tài)的錯(cuò)誤情況下拋出異常)
添加回答
舉報(bào)