SpringBoot doesn't handle org.hibernate.exception.ConstraintViolationException

后端 未结 11 934
没有蜡笔的小新
没有蜡笔的小新 2020-12-10 01:37

I have defined a pattern for validating email in my Entity class. In my validation exception handler class, I have added handler for ConstraintViolationException. My appli

11条回答
  •  执笔经年
    2020-12-10 02:10

    That is my solution...

    @ExceptionHandler({DataIntegrityViolationException.class})
        protected ResponseEntity handlePersistenceException(final DataIntegrityViolationException ex) {
    
            Throwable cause = ex.getRootCause();
    
            if (cause instanceof SQLIntegrityConstraintViolationException) {
    
                SQLIntegrityConstraintViolationException consEx = (SQLIntegrityConstraintViolationException) cause;
    
                final ApiErrorResponse apiError =  ApiErrorResponse.newBuilder()
                        .message(consEx.getLocalizedMessage())
                        .status(HttpStatus.BAD_REQUEST)
                        .build();
    
                return new ResponseEntity<>(apiError, new HttpHeaders(), apiError.getStatus());
            }
    
            final ApiErrorResponse apiError =  ApiErrorResponse.newBuilder()
                    .message(ex.getLocalizedMessage())
                    .status(HttpStatus.NOT_ACCEPTABLE)
                    .build();
    
            return new ResponseEntity<>(apiError, new HttpHeaders(), apiError.getStatus());
        }
    
    
    
    @ExceptionHandler(RollbackException.class)
       public ResponseEntity handleNotValidException(RollbackException ex){
    
           String errMessage = ex.getCause().getMessage();
    
           List listErrMessage = getListErrMessage(errMessage);
           ApiErrorsListResponse response = ApiErrorsListResponse.newBuilder()
                   .status(HttpStatus.NOT_ACCEPTABLE)
                   .errorMessage(listErrMessage)
                   .build();
    
           return new ResponseEntity<>(response, HttpStatus.NOT_ACCEPTABLE);
    
       }
    
        public static List getListErrMessage(String msg){
    
            Stream stream = Arrays.stream(msg.split("\n"))
                    .filter(s -> s.contains("\t"))
                    .map(s -> s.replaceAll("^([^\\{]+)\\{", ""))
                    .map(s -> s.replaceAll("[\"]", ""))
                    .map(s -> s.replaceAll("=", ":"))
                    .map(s -> s.replaceAll("interpolatedMessage", "message"))
                    .map(s -> s.replaceAll("\\{|\\}(, *)?", ""));
    
            return stream.collect(Collectors.toList());
        }
    
    • bean
    
    public class ApiErrorsListResponse {
    
        private HttpStatus status;
    
     private List errorMessage;
    
        public ApiErrorsListResponse() {
        }
    ...
    }
    
    

    提交回复
    热议问题