Автор: программист-школьник
Время: 03.02.2018
Единый обработчик исключений. Поддерживает возврат единого формата JSON и переход на страницу ошибки.
В наших проектах неизбежно возникают различные исключения, такие как пользовательские исключения, исключения параметров и другие. При возникновении исключений мы обычно их перехватываем и решаем или напрямую передаём информацию об ошибке клиенту. Однако возникает проблема: множество беспорядочных сообщений об ошибках напрямую передаются пользователю. Пользователи могут не понять, что произошло. Некоторые предлагают просто проверять код состояния и выводить сообщение об ошибке, если код не равен 200. Это возможно, но мы хотим более точно знать, какое именно исключение произошло, например, исключение параметров или бизнес-исключения. Поэтому «exception-handler» — это инструмент для унифицированной обработки исключений, который может помочь нам обрабатывать любые пользовательские и другие исключения. Он обрабатывает исключения таким образом, чтобы возвращать JSON-формат клиенту.
{
"code": 1,
"msg": "системное исключение",
"result": "xxxxx"
}
Примечание: код для разных типов исключений различен. Встроенные исключения включают исключения параметров и системные исключения. Фронтенд может выполнять разные действия в зависимости от кода.
Я уже говорил о том, для чего это нужно. Теперь давайте поговорим о том, как это использовать. Есть два способа использования: один для проектов Maven, другой — для проектов без Maven.
Сначала загрузите этот проект и запустите следующую команду в корневом каталоге проекта (включая каталог pom.xml):
mvn clean install
Затем добавьте следующую конфигурацию в файл pom.xml вашего проекта:
<dependency>
<groupId>com.chentongwei</groupId>
<artifactId>exception-handler</artifactId>
<version>1.0.0</version>
</dependency>
Сначала скачайте проект, а затем экспортируйте его в виде jar-файла и поместите в каталог lib вашего проекта.
Теперь давайте рассмотрим, как использовать этот инструмент в Spring и Springboot проектах.
Просто скопируйте следующую конфигурацию в свой конфигурационный файл.
<bean id="exceptionResolver" class="com.chentongwei.interceptor.ExceptionResolver" />
Скопируйте следующий класс конфигурации в пакет, управляемый 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 )