Nasza aplikacja internetowa używa ExceptionMapper
do mapowania niektórych wyjątków Response
. Komunikaty o wyjątkach rejestrujemy przed zgłoszeniem nowego wyjątku w następujący sposób:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
Nie rzucamy ponownie tego samego wyjątku , więc moje pytanie brzmi, czy byłoby to uważane za antypater . A zatem, czy lepiej byłoby usunąć rejestrowanie w podobnych miejscach i przenieść je do kilku ExceptionMapper
klas w następujący sposób:
@Provider
public class MyExceptionMapper implements ExceptionMapper<MyException> {
// bla bla
@Override
public Response toResponse(final MyException ex) {
LOG.error(ex.getMessage());
return Response.status(400).entity("something").build();
}
}
java
anti-patterns
Diyarbakir
źródło
źródło
ex.getMessage()
, to już źle.Odpowiedzi:
W rzeczywistości kod zawiera nie tylko jeden, ale trzy anty-wzory:
Jeśli zastosujesz się do najlepszych praktyk, aby:
log.error("Error occurred", e);
wtedy nie napotkalibyście żadnych dylematów, w tym także obecnego, ponieważ zalogowany ślad stosu obejmowałby również wszystkie opakowane wyjątki.
źródło