All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.shoulder.web.advice.RestControllerDataExceptionAdvice Maven / Gradle / Ivy

Go to download

shoulder WEB 模块,基于Spring Boot Web提供了 Controller AOP 日志、AOP异常处理,统一返回值,健康检查,租户、用户解析,Web 安全防护,通用CrudController,动态字典,标签管理,HTTP client AOP日志、AOP异常处理等能力,助力Web飞速开发。

The newest version!
package org.shoulder.web.advice;

import org.shoulder.core.dto.response.BaseResult;
import org.shoulder.core.exception.BaseRuntimeException;
import org.shoulder.core.exception.CommonErrorCodeEnum;
import org.shoulder.core.log.Logger;
import org.shoulder.core.log.ShoulderLoggers;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * Spring Data Exception,spring data 中不会抛出 SQLException、HibernateException,而是自己完全定义了一套
 *
 * @author lym
 */
@Order(Ordered.LOWEST_PRECEDENCE - 1)
@RestControllerAdvice
public class RestControllerDataExceptionAdvice {

    private final Logger log = ShoulderLoggers.SHOULDER_WEB_ERROR;

    /**
     * 数据重复
     */
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler({DuplicateKeyException.class})
    public BaseResult paramsMissingHandler(DuplicateKeyException e) {
        BaseRuntimeException stdEx = new BaseRuntimeException(CommonErrorCodeEnum.DATA_STORAGE_FAIL, e, e.getMessage());
        log.error(stdEx);
        return stdEx.toResponse();
    }

    /**
     * 数据库 / SQL 问题
     */
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler({DataAccessException.class})
    public BaseResult paramsMissingHandler(DataAccessException e) {
        BaseRuntimeException stdEx = new BaseRuntimeException(CommonErrorCodeEnum.DATA_ACCESS_FAIL, e, e.getMessage());
        log.error(stdEx);
        return stdEx.toResponse();
    }

    /*
    DataIntegrityViolationException Insert或Update数据时违反了完整性,例如违反了惟一性限制,比如 name最大16,却传来了200
    PersistenceException 数据类型不正确,比如数据库int,来了string(abc)
    BadSqlGrammarException sql 写错了->代码写错了->对外未知错误
    TransientDataAccessResourceException 查的时候,赋值错了,比如缺少字段 / 格式不正确;如时间格式Zero date value prohibited-通过jdbc连接时候,zeroDateTimeBehavior=CONVERT_TO_NULL
    CleanupFailureDataAccessException 一项操作成功地执行,但在释放数据库资源时发生异常(例如,关闭一个Connection)
    DataAccessResourceFailureException 数据访问资源彻底失败,例如不能连接数据库
    DataRetrievalFailureException 某些数据不能被检测到,例如不能通过关键字找到一条记录
    DeadlockLoserDataAccessException	当前的操作因为死锁而失败
    IncorrectUpdateSemanticsDataAccessException	Update时发生某些没有预料到的情况,例如更改超过预期的记录数。当这个异常被抛出时,执行着的事务不会被回滚
    InvalidDataAccessApiusageException	一个数据访问的JAVA API没有正确使用,例如必须在执行前编译好的查询编译失败了
    invalidDataAccessResourceUsageException	错误使用数据访问资源,例如用错误的SQL语法访问关系型数据库
    OptimisticLockingFailureException	乐观锁的失败。这将由ORM工具或用户的DAO实现抛出
    TypemismatchDataAccessException	Java类型和数据类型不匹配,例如试图把String类型插入到数据库的数值型字段中
    UncategorizedDataAccessException	有错误发生,但无法归类到某一更为具体的异常中*/

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy