私が思いついた解決策の1つは、Spring Controllerシナリオの多く。この場合
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler
{
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler({RollbackException.class, DataIntegrityViolationException.class})
public @ResponseBody
Map<String,Object> allRollbacks
(
Exception exception,
HttpServletRequest request,
HttpServletResponse response
)
{
HashMap<String, Object> result = new HashMap<>();
result.put("error", HttpStatus.BAD_REQUEST.name());
Throwable exceptionToLog = Throwables.getRootCause(exception);
String exceptionClassName = exceptionToLog.getClass().getCanonicalName();
String message = exceptionToLog.getMessage();
log.info("{}: {}", exceptionClassName, message);
result.put("exception", exceptionClassName);
result.put("message", message);
return result;
}
}
、我々はintercepterからログに短い根本原因メッセージが表示され、クライアントはそのようなJSONレスポンスを受信します:
{
"exception": "org.postgresql.util.PSQLException",
"error": "BAD_REQUEST",
"message": "ERROR: duplicate key value violates unique constraint \"ukr6y7o33kjy3vispmnl7if5d4s\"\n Detail: Key (ref1_id, ref2_id, ref3_id)=(8325842b-ee40-48c3-ab6b-5b914e70b583, 9b0f5356-baa8-4ae2-a149-4f7b1f2dbfda, 9281369c-10a6-4649-bcd3-c18d2e5cd287) already exists."
}
出典
2016-11-02 06:35:58
Val