Dispongo di un microservizio Java che espone più API. Sotto ogni API ci sono molte eccezioni che potrebbero essere lanciate. L'ultimo metodo che li cattura tutti ha un grosso blocco catch
...
catch(exc1 e1 | exc2 e2 | exc3 e3 ..... | exc10 e10){ ...}
Sono tutti dello stesso livello. Ora pensavo di unirli tutti sotto un'unica eccezione. Quindi, exc1 a exc10 estendono Api1Exception
. Quindi potrei prenderlo in questo modo:
catch(Api1Exceptione){ ... }
Più pulito e più facile da controllare. Però. Ho realizzato che altre API condividono alcune di Api1Exception
eccezioni. Diciamo API2, sta lanciando qualcosa come:
catch(exc13 e13 | exc2 e2 | exc16 e16 ..... | exc19 e19){ ...}
Non voglio catturare l'intero Api1Exception
, perché alcuni di essi non vengono lanciati in quella logica API2. Quindi, ho dovuto creare un'altra eccezione Api2Exception
e ho creato un'altra copia di say exc2
per essere un figlio di Api2Exception
. Questo per me sembra un codice ridondante, e ho pensato che ci dovrebbe essere un modo migliore per gestire questo. Qualche idea?
UPDATE
Seguendo la risposta, questo è quello che ho fatto:
- creato
CustomException
che estendeException
, con campoerrorCode
- Ogni eccezione personalizzata che creo, estende
CustomException
e passa ilerrorCode
insieme amessage
-
Lo prendo in questo modo:
catch(CustomException ce){ handleCustomException(ce) }
-
metodo di gestione:
if(ce.getErrorCode().eqauls(SOME_ERROR_CODE){ //do something } else if (ce.getErrorCode().eqauls(SOME_ERROR_CODE){ //do something else } //....... else{ throw new Exception .... }
P.S. : Non sono sicuro del motivo per cui la mia domanda è stata downvoted. Chiunque l'abbia fatto, sarebbe fantastico se fornissi un feedback.