目录
一、普通枚举
package com.xuecheng.base.config.exception;
/**
* @author Mr.L
* @version 1.0
* @description 定义枚举类型
* @date 2024/3/27 11:18
*/
public enum CommonError {
UNKOWN_ERROR("执行过程异常,请重试。"),
PARAMS_ERROR("非法参数"),
OBJECT_NULL("对象为空"),
QUERY_NULL("查询结果为空"),
REQUEST_NULL("请求参数为空");
private String errMessage;
public String getErrMessage() {
return errMessage;
}
private CommonError( String errMessage) {
this.errMessage = errMessage;
}
}
二、全局异常处理器配置
全局异常处理类处理不同的异常都返回异常类型RestErrorResponse
package com.xuecheng.base.config.exception;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import java.util.ArrayList;
import java.util.List;
/**
* @author Mr.L
* @version 1.0
* @description TODO
* @date 2024/3/27 11:18
*/
@ControllerAdvice
@Slf4j
//利用切面编程捕获异常
public class GlobalExceptionHandler {
//指定处理的异常类
@ExceptionHandler(XueChengPlusException.class)
//返回json格式
@ResponseBody
//异常状态码
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
//对项目的自定义异常的处理
public RestErrorResponse customException(XueChengPlusException e){
//记录异常
log.info("系统异常:{}",e.getMessage());
//解析出异常信息 用RestErrorResponse类型返回 具体什么类型返回可以自定义
String message = e.getMessage();
RestErrorResponse restErrorResponse = new RestErrorResponse(message);
return restErrorResponse;
}
@ExceptionHandler(Exception.class)
//返回json格式
@ResponseBody
//异常状态码
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
//对其他异常处理
public RestErrorResponse RestExceptionResponse(RuntimeException e){
//记录异常
log.info("系统异常:{}",e.getMessage());
RestErrorResponse restErrorResponse = new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());
return restErrorResponse;
}
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
List<String> msgList = new ArrayList<>();
//将错误信息放在msgList
bindingResult.getFieldErrors().stream().forEach(item->msgList.add(item.getDefaultMessage()));
//拼接错误信息
String msg = StringUtils.join(msgList, ",");
log.error("【系统异常】{}",msg);
return new RestErrorResponse(msg);
}
}
RestErrorResponse定义:(前端沟通定义)
package com.xuecheng.base.config.exception;
import java.io.Serializable;
/**
* @author Mr.L
* @version 1.0
* @description 前后端协调返回的异常信息类型
* @date 2024/3/27 11:18
*/
public class RestErrorResponse implements Serializable {
private String errMessage;
public RestErrorResponse(String errMessage){
this.errMessage= errMessage;
}
public String getErrMessage() {
return errMessage;
}
}
XueChengPlusException:
package com.xuecheng.base.config.exception;
/**
* @author Mr.M
* @version 1.0
* @description 学成在线项目异常类
* @date 2022/9/6 11:29
*/
public class XueChengPlusException extends RuntimeException {
private String errMessage;
public XueChengPlusException() {
super();
}
public XueChengPlusException(String errMessage) {
super(errMessage);
this.errMessage = errMessage;
}
//自定义 重写成静态
public static void cast(String messgae){
throw new XueChengPlusException(messgae);
}
public static void cast(CommonError messgae){
throw new XueChengPlusException(messgae.getErrMessage());
}
}
ps:对于异常处理一般是throw new Exception(e),可以静态化输出
如上面的
public static void cast(String messgae){
throw new XueChengPlusException(messgae);
}public static void cast(CommonError messgae){
throw new XueChengPlusException(messgae.getErrMessage());
}
三、静态字段
package cn.itcast.user.properties;
public class StaticEnum {
public static final String MAY_BY_CAN_DO_IT="1";
public static final String Go="2";
}
四、引用配置属性对字段赋值
package cn.itcast.user.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author Mr.Lan
* @version 1.0
* @ClassName configProperities$
* @description TODO
* @date 2024/5/15 17:21
**/
@Component
@Data
@ConfigurationProperties(prefix = "config.sort")
public class ConfigProperities {
private String Ase;
private String Des;
private String Other;
}