2017-10-12 59 views
-2

現在,我在Spring 4.中使用@ControllerAdvice。*。 使用beforeBodyWrite方法。我可以知道在@ControllerAdvice中調用了哪個控制器嗎?

在控制器類中創建自定義註釋。 在@ControllerAdvice處理時獲取控制器的信息。

我想知道來自什麼是控制器類的請求。

但是,我不知道解決方案。

任何幫助。?

感謝

+0

你想幹什麼SH? 'beforeBodyWrite()'在'ResponseBodyAdvice'中。你想知道在那裏執行的控制器?如果是這樣,爲什麼? – Kayaman

+0

我需要知道控制器的註釋。然後創建自定義註記類,在控制器類的方法級別定義註記類。原因,我需要在messageConverter執行之前通過註釋來重置數據。 –

+0

一個非常不好的問題,請先閱讀本頁,然後編輯您的問題:https://stackoverflow.com/help/how-to-ask – Ibo

回答

0

雖然你的問題沒有明確說明是什麼目的你正在實現,爲什麼你需要創建一個自定義註解我會後你一些指導說明如何確定的源您RuntimeExceptionControllerAdvice

考慮下列休息控制器:

@RestController 
public class CARestController { 
    @RequestMapping(value = "/test", method = RequestMethod.GET) 
    public String testException() { 
     throw new RuntimeException("This is the first exception"); 
    } 
} 

@RestController 
public class CAOtherRestController { 
    @RequestMapping(value = "/test-other", method = RequestMethod.GET) 
    public String testOtherException() { 
     throw new RuntimeException("This is the second exception"); 
    } 
} 

哪個都拋出一個異常,我們可以通過捕獲該異常下面ControllerAdvice並使用堆棧跟蹤確定異常的來源。

@ControllerAdvice 
public class CAControllerAdvice { 
    @ExceptionHandler(value = RuntimeException.class) 
    protected ResponseEntity<String> handleRestOfExceptions(RuntimeException ex) { 
     return ResponseEntity.badRequest().body(String.format("%s: %s", ex.getStackTrace()[0].getClassName(), ex.getMessage())); 
    } 
} 

這是端點的輸出如何看:

Output of First Controller Output of second Controller

我的建議是,與其這樣做,你聲明自己的一套異常,然後抓住他們您的控制器建議,與他們被拋出的位置無關:

public class MyExceptions extends RuntimeException { 
} 

public class WrongFieldException extends MyException { 
} 

public class NotFoundException extends MyException { 
} 

@ControllerAdvice 
public class CAControllerAdvice { 
    @ExceptionHandler(value = NotFoundException .class) 
    public ResponseEntity<String> handleNotFound() { 
     /**...**/ 
    } 
    @ExceptionHandler(value = WrongFieldException .class) 
    public ResponseEntity<String> handleWrongField() { 
     /**...**/ 
    } 
} 
+0

他的'RuntimeException'的來源? – Kayaman

+0

ControllerAdvice用於捕獲未經檢查且不需要在方法中聲明爲「throws」的RuntimeException。儘管我可以編輯答案,但採用這種方式是更好的做法(在我看來)。 –

+0

異常處理是'@ ControllerAdvice'的常見用法,但它不是唯一的。他沒有說任何有關例外的事情。事實上,目前還不清楚他在說什麼,以及它是否與'@ ControllerAdvice'有關... – Kayaman

相關問題