फायरिंग नहीं हैंडलर मैं निम्नलिखित नियंत्रक सलाह की स्थापना की, त्रुटि की स्थिति के लिए एक एपीआई अनुबंध लौटना पड़ा:स्प्रिंग बूट @ControllerAdvice अपवाद
@ControllerAdvice
public class ExceptionHandler : ResponseEntityExceptionHandler()
{
@ExceptionHandler(Throwable::class)
@ResponseBody
public fun onException(ex: Throwable): ResponseEntity<ErrorResponse>
{
val errorResponse = ErrorResponse(
response = ResponseHeader(ex.responseCode(), ex.message))
return ResponseEntity(errorResponse, HttpStatus.UNAUTHORIZED);
}
}
यह था ठीक काम कर रहा है और फिर काम करना बंद कर। अब सभी अपवादों BasicErrorController
ले जाया जाता है, जो इस प्रारूप प्रस्तुत करती है:
{
"timestamp" : 1450495303166,
"status" : 403,
"error" : "Forbidden",
"message" : "Access Denied",
"path" : "/profile/candidates"
}
ऊपर एक अच्छा स्वच्छंद प्रारंभिक बिंदु है, लेकिन अब यह रास्ते से हट जाओ नहीं होंगे।
- मैंने
ExceptionHandlerExceptionResolver
के एक उदाहरण के साथ त्रुटि हैंडलर को बदलने की कोशिश की है लेकिन यह काम नहीं करता है। - मैंने अपना खुद का कस्टमरर हैडलर बनाने का प्रयास किया है, लेकिन यह भी उपयुक्त नहीं था क्योंकि मूल अपवाद अब
HttpServletRequest
में कस्टम त्रुटि नियंत्रक के लिए फिर से रूट होने तक नहीं है। ग्राहक को उचित प्रतिक्रिया वापस करने के लिए इस जानकारी की आवश्यकता है।
मैं कैसे करने के लिए:
- मेक एक अपवाद नियंत्रक से SpringBoot नहीं आगे अपवाद नहीं।
- @ControllerAdvice अपवाद हैंडलर को पुनर्स्थापित करें, ताकि मैं एक उचित प्रतिक्रिया निकाय और स्थिति कोड वापस कर सकूं।
स्टार्टअप वसंत लॉग पर:
main] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in exceptionHandler
main] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in responseEntityExceptionHandler
संपादित करें:
स्प्रिंग बूट डॉक्स के माध्यम से पढ़ने के बाद, मैं अब खड़े कि BasicErrorController केवल किसी भी अपवाद के लिए गोली चलानी है के तहत @ControllerAdvice
द्वारा संचालित नहीं है। ऐसा प्रतीत नहीं होता है। तो सवाल यह है कि क्यों?
मैंने कोशिश की, लेकिन इसका पालन नहीं किया। मेरे उत्तर में दृष्टिकोण का उपयोग कर समाप्त हो गया। यकीन नहीं है कि यह एक अच्छा है। –