第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅將異常處理綁定到 @ControllerAdvice 類

僅將異常處理綁定到 @ControllerAdvice 類

慕慕森 2022-06-15 16:32:45
我有一個帶有 REST 方法的控制器類,可以拋出各種異常。我決定在一個單獨的類中使用 @ControllerAdvice 和 @ExceptionHandler 作為我的處理程序方法來處理這些異常。但是,我有一個問題,即我的 REST 方法使用來自另一個庫的注釋。這個庫捕獲了我的 REST 方法也拋出的異?!,F(xiàn)在我正在全局處理異常,而不是直接通過 REST 方法中的 try/catch,我的異??偸潜黄渌麕於皇俏易约旱奶幚沓绦蚍椒ú东@。顯然,由于注釋,我正在使用的庫中的其他方法獲勝。如何將異常處理綁定到我自己的類以防止它被其他人捕獲?我的 REST 方法:@SomeLibraryAnnotation@PostMapping(path = "/add", consumes = MediaType.APPLICATION_JSON_VALUE)public HttpEntity< ? > addItem(@RequestHeader HttpHeaders headers, @RequestBody MyDTO myDTO)  throws UnsupportedOperationException {  doSomethingWith(myDTO);  return ResponseEntity.status(HttpStatus.CREATED).build();}我的異常處理程序類:@ControllerAdvicepublic class MyExceptionHandler { @ExceptionHandler(UnsupportedOperationException.class) public ResponseEntity<?> handleUnsupportedOperationException(UnsupportedOperationException e) {            return ResponseEntity.status(HttpStatus.FORBIDDEN).body(e.getMessage()); }}由于庫方法還捕獲 UnsupportedOperationException,因此它會因 @SomeLibraryAnnotation 而獲勝,并且該異常從未在我的處理程序類中處理。
查看完整描述

3 回答

?
POPMUISE

TA貢獻1765條經(jīng)驗 獲得超5個贊

您可以嘗試在類中使用@Orderor ,如設(shè)置多個 @ControllerAdvice @ExceptionHandlers 的優(yōu)先級中所述。@PriorityMyExceptionHandler

這將使 Spring 有機會使用您的類而不是@SomeLibraryAnnotation. 但是,在不知道 Spring 在上下文初始化時如何解釋其他注釋的情況下,這只是一個猜測。


查看完整回答
反對 回復(fù) 2022-06-15
?
呼喚遠方

TA貢獻1856條經(jīng)驗 獲得超11個贊

這些只是 Java 語言規(guī)則,即異常不再是unhandled,因為它已由您的其他庫處理(在 catch 塊中捕獲)。你可以做的是在你的庫中重新拋出(可能有條件地)另一個捕獲原始異常的異常,看看是否@ExceptionHandler會處理它。這可能不是因為@ExceptionHandler正在處理 Controller 類中引發(fā)的異常。

第二種方法是拋出僅在 @ExceptionHandler 中處理的異常,然后重新拋出它在其他庫中處理。

換句話說,您需要選擇在哪里處理最初拋出的異常。

第三種方法是使用 AOP 攔截器@AfterThrowing,或者@Around然后執(zhí)行您想要的任何邏輯。

本質(zhì):沒有辦法同時處理兩個地方的異常。是否有意義?


查看完整回答
反對 回復(fù) 2022-06-15
?
ABOUTYOU

TA貢獻1812條經(jīng)驗 獲得超5個贊

您是否嘗試@ExceptionHandler在控制器內(nèi)部編寫代碼?喜歡:


@RestController

@RequestMapping("/path")

public class TheController {


     @ExceptionHandler(UnsupportedOperationException.class)

     public ResponseEntity<?> handleUnsupportedOperationException(UnsupportedOperationException e) {        

        return ResponseEntity.status(HttpStatus.FORBIDDEN).body(e.getMessage());

     }

}

也許這會以更高的優(yōu)先級拾取和例外。很難回答不知道是什么@SomeLibraryAnnotation...


查看完整回答
反對 回復(fù) 2022-06-15
  • 3 回答
  • 0 關(guān)注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號