Return error details for unhandled ConstraintViolationException; log tenant and user ids on failure
This commit is contained in:
		
							parent
							
								
									31e1d082f2
								
							
						
					
					
						commit
						3e50963005
					
				@ -22,6 +22,7 @@ import jakarta.servlet.http.HttpServletResponse;
 | 
			
		||||
import jakarta.validation.ConstraintViolation;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
import org.apache.commons.lang3.exception.ExceptionUtils;
 | 
			
		||||
import org.hibernate.exception.ConstraintViolationException;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Value;
 | 
			
		||||
@ -358,29 +359,33 @@ public abstract class BaseController {
 | 
			
		||||
 | 
			
		||||
    private ThingsboardException handleException(Exception exception, boolean logException) {
 | 
			
		||||
        if (logException && logControllerErrorStackTrace) {
 | 
			
		||||
            log.error("Error [{}]", exception.getMessage(), exception);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        String cause = "";
 | 
			
		||||
        if (exception.getCause() != null) {
 | 
			
		||||
            cause = exception.getCause().getClass().getCanonicalName();
 | 
			
		||||
            try {
 | 
			
		||||
                SecurityUser user = getCurrentUser();
 | 
			
		||||
                log.error("[{}][{}] Error", user.getTenantId(), user.getId(), exception);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                log.error("Error", exception);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Throwable cause = exception.getCause();
 | 
			
		||||
        if (exception instanceof ThingsboardException) {
 | 
			
		||||
            return (ThingsboardException) exception;
 | 
			
		||||
        } else if (exception instanceof IllegalArgumentException || exception instanceof IncorrectParameterException
 | 
			
		||||
                || exception instanceof DataValidationException || cause.contains("IncorrectParameterException")) {
 | 
			
		||||
                || exception instanceof DataValidationException || cause instanceof IncorrectParameterException) {
 | 
			
		||||
            return new ThingsboardException(exception.getMessage(), ThingsboardErrorCode.BAD_REQUEST_PARAMS);
 | 
			
		||||
        } else if (exception instanceof MessagingException) {
 | 
			
		||||
            return new ThingsboardException("Unable to send mail: " + exception.getMessage(), ThingsboardErrorCode.GENERAL);
 | 
			
		||||
        } else if (exception instanceof AsyncRequestTimeoutException) {
 | 
			
		||||
            return new ThingsboardException("Request timeout", ThingsboardErrorCode.GENERAL);
 | 
			
		||||
        } else if (exception instanceof DataAccessException) {
 | 
			
		||||
            String errorType = exception.getClass().getSimpleName();
 | 
			
		||||
            if (!logControllerErrorStackTrace) { // not to log the error twice
 | 
			
		||||
                log.warn("Database error: {} - {}", errorType, ExceptionUtils.getRootCauseMessage(exception));
 | 
			
		||||
                log.warn("Database error: {} - {}", exception.getClass().getSimpleName(), ExceptionUtils.getRootCauseMessage(exception));
 | 
			
		||||
            }
 | 
			
		||||
            if (cause instanceof ConstraintViolationException) {
 | 
			
		||||
                return new ThingsboardException(ExceptionUtils.getRootCause(exception).getMessage(), ThingsboardErrorCode.BAD_REQUEST_PARAMS);
 | 
			
		||||
            } else {
 | 
			
		||||
                return new ThingsboardException("Database error", ThingsboardErrorCode.GENERAL);
 | 
			
		||||
            }
 | 
			
		||||
            return new ThingsboardException("Database error", ThingsboardErrorCode.GENERAL);
 | 
			
		||||
        }
 | 
			
		||||
        return new ThingsboardException(exception.getMessage(), exception, ThingsboardErrorCode.GENERAL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user