1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/geekerdream-exception-handler

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 8.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 21:06 41b63b2

Автор: программист-школьник

Время: 03.02.2018

Проект «exception-handler»

Что это?

Единый обработчик исключений. Поддерживает возврат единого формата JSON и переход на страницу ошибки.

Для чего нужен?

В наших проектах неизбежно возникают различные исключения, такие как пользовательские исключения, исключения параметров и другие. При возникновении исключений мы обычно их перехватываем и решаем или напрямую передаём информацию об ошибке клиенту. Однако возникает проблема: множество беспорядочных сообщений об ошибках напрямую передаются пользователю. Пользователи могут не понять, что произошло. Некоторые предлагают просто проверять код состояния и выводить сообщение об ошибке, если код не равен 200. Это возможно, но мы хотим более точно знать, какое именно исключение произошло, например, исключение параметров или бизнес-исключения. Поэтому «exception-handler» — это инструмент для унифицированной обработки исключений, который может помочь нам обрабатывать любые пользовательские и другие исключения. Он обрабатывает исключения таким образом, чтобы возвращать JSON-формат клиенту.

{
    "code": 1,
    "msg": "системное исключение",
    "result": "xxxxx"
}

Примечание: код для разных типов исключений различен. Встроенные исключения включают исключения параметров и системные исключения. Фронтенд может выполнять разные действия в зависимости от кода.

Как использовать?

Я уже говорил о том, для чего это нужно. Теперь давайте поговорим о том, как это использовать. Есть два способа использования: один для проектов Maven, другой — для проектов без Maven.

Использование в проекте Maven

Сначала загрузите этот проект и запустите следующую команду в корневом каталоге проекта (включая каталог pom.xml):

mvn clean install

Затем добавьте следующую конфигурацию в файл pom.xml вашего проекта:

<dependency>
    <groupId>com.chentongwei</groupId>
    <artifactId>exception-handler</artifactId>
    <version>1.0.0</version>
</dependency>

Использование вне проекта Maven

Сначала скачайте проект, а затем экспортируйте его в виде jar-файла и поместите в каталог lib вашего проекта.

Теперь давайте рассмотрим, как использовать этот инструмент в Spring и Springboot проектах.

Использование в Spring

Просто скопируйте следующую конфигурацию в свой конфигурационный файл.

<bean id="exceptionResolver" class="com.chentongwei.interceptor.ExceptionResolver" />

Использование в Springboot

Скопируйте следующий класс конфигурации в пакет, управляемый Spring, в вашем проекте.

import com.chentongwei.interceptor.ExceptionResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author TongWei.Chen 2018-03-01 16:13
 */
@Configuration
public class WebConfig {

    @Bean
    public ExceptionResolver getBean() {
        return new ExceptionResolver();
    }
}

После настройки вы можете использовать этот инструмент. Если в вашем проекте возникнет ошибка, она будет перехвачена системой и информация об ошибке будет передана клиенту. Если вы хотите выбросить собственное исключение, вы можете создать собственный класс исключений и наследовать от com.chentongwei.exception.ExceptionStrategy (который включает встроенный BussinessException).

Пример пользовательского исключения

import com.chentongwei.enums.IBaseEnum;
import com.chentongwei.strategy.ExceptionStrategy;

/**
 * @author TongWei.Chen 2018-03-01 15:55
 */
public class UserNotExistException extends ExceptionStrategy {

    private IBaseEnum baseEnum;

    public IBaseEnum getBaseEnum() {
        return baseEnum;
    }

    public void setBaseEnum(IBaseEnum baseEnum) {
        this.baseEnum = baseEnum;
    }

    public UserNotExistException(IBaseEnum baseEnum) {
        this.baseEnum = baseEnum;
    }

    @Override
    public IBaseEnum resolverException() {
        return this.baseEnum;
    }
}

Обратите внимание, что com.chentongwei.enums.IBaseEnum — это пользовательский интерфейс ошибок, поэтому он должен содержать атрибут и конструктор с этим атрибутом.

Если вы хотите настроить код ошибки и сообщение об ошибке, вы можете определить собственный класс перечисления и реализовать com.chentongwei.enums.IBaseEnum.

Пример настраиваемого перечисления

import com.chentongwei.enums.IBaseEnum;

/**
 * @author TongWei.Chen 2018-03-02 14:20:38
 */
public enum  ResponseEnum implements IBaseEnum{

    NULL(2, "未查到此数据")
    ;

    private int code;
    private String msg;

    ResponseEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public int getCode() {
        return this.code;
    }

    @Override
    public String getMsg() {
        return this.msg;
    }
}

Полный пример:

import com.chentongwei.enums.IBaseEnum;
import com.chentongwei.strategy.ExceptionStrategy;

/**
 * @author TongWei.Chen 22018-03-01 15:55
 */
public class UserNotExistException extends ExceptionStrategy {

    private IBaseEnum baseEnum;

    public IBaseEnum getBaseEnum() {
        return baseEnum;
    }

    public void setBaseEnum(IBaseEnum baseEnum) {
        this.baseEnum = baseEnum;
    }

    public UserNotExistException(IBaseEnum baseEnum) {
        this.baseEnum = baseEnum;
    }

    @Override
    public IBaseEnum resolverException() {
        return this.baseEnum;
    }
}

import com.chentongwei.enums.IBaseEnum;

/**
 * @author TongWei.Chen 2018-03-02 14:20:38
 */
public enum  ResponseEnum implements IBaseEnum{

    NULL(2, "未查到此数据")
    ;

    private int code;
    private String msg;

    ResponseEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public int getCode() {
        return this.code;
    }

    @Override
    public String getMsg() {
        return this.msg;
    }
}

@RestController
public class UserController {

    @GetMapping("/user/{id}")
    public void

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/geekerdream-exception-handler.git
git@api.gitlife.ru:oschina-mirror/geekerdream-exception-handler.git
oschina-mirror
geekerdream-exception-handler
geekerdream-exception-handler
master