以下是个人在做项目阶段,对项目中不熟悉问题的总结,欢迎各位大佬指正
1、枚举类的定义
①、枚举类中的常量值必须全部为大写,并且枚举类属性默认为 public static final
②、枚举类常量定义用‘ , ’隔开,在最后一个逗号之后在使用分号
一下是一个标准的枚举类的定义:
public enum LevelEnum {
HEADER("主管"),//用逗号隔开
EMPLOYEE("员工"),
USER_LOGIN_SUCCESS("200","登录成功"),
USER_LOGIN_ERROR("400","登录失败"),
;//最后用分号
public String level;//属性类型默认为public final,即使此处没有显示的定义final
LevelEnum(String level) {//构造方法,为别的类能够调用枚举类的level属性
this.level = level;
}
}
2、对于服务器端出现的各种异常的处理:
①、定义全局异常处理器,拦截所有在程序中出现的异常并且以JSON格式的数据统一返回给前端:
·使用@ControllerAdvice(basePackages="com.atlzk.controller")注解,basePackages是表示需要处理异常的包,
但是如果没有加,basePackages则该异常处理器,只会拦截该类所在包下出现的异常。(想要拦截所有包出现的异常则basePackages=com即可
②、全局异常处理器:
package com.atlzk.common.exception;
import com.atlzk.common.Result;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice(basePackages="com.atlzk.controller")//表示该处理器拦截controller所在包下面吹出现的异常
public class GlobalExceptionHandler {
// private static final Log log = LogFactory.get();
//统一异常处理@ExceptionHandler,主要用于Exception
@ExceptionHandler(Exception.class)
@ResponseBody//返回json串
public Result error(HttpServletRequest request, Exception e){
return Result.error();
}
@ExceptionHandler(CustomeException.class)//获取自定义的CustomeException异常
@ResponseBody//返回json串
public Result customError(HttpServletRequest request, CustomeException e){
return Result.error(e.getCode(), e.getMsg());
}
}
import com.atlzk.common.enums.ResultCodeEnum;
public class CustomeException extends RuntimeException{
private String msg;
private String code;
public CustomeException(String code,String msg){
super(msg);
this.msg=msg;
this.code=code;
}
public CustomeException(ResultCodeEnum resultCodeEnum) {
this.msg=resultCodeEnum.msg;
this.code=resultCodeEnum.code;
}
public String getMsg(){
return msg;
}
public void setMsg(String msg){
this.msg=msg;
}
public String getCode(){
return code;
}
public void setCode(String code){
this.code=code;
}
}
3、定义统一的返回结果:Result类,其中方法均为static是为了通过类名可以直接调用其中的success/error方法
import com.atlzk.common.enums.ResultCodeEnum;
public class Result {
private String code;
private String msg;
private Object data;
private Result(Object data) {
this.data = data;
}
public Result() {
}
public static Result success() {//返回一个表示成功的 Result 对象。设置状态码为 SUCCESS.code,消息为 SUCCESS.msg。
Result tResult = new Result();
tResult.setCode(ResultCodeEnum.SUCCESS.code);
tResult.setMsg(ResultCodeEnum.SUCCESS.msg);
return tResult;
}
public static Result success(Object data) {//表示成功的Result对象,你需要传入一个data数据
Result tResult = new Result (data);
tResult.setCode(ResultCodeEnum.SUCCESS.code);
tResult.setMsg(ResultCodeEnum.SUCCESS.msg);
return tResult;
}
public static Result error() {
Result tResult = new Result();
tResult.setCode(ResultCodeEnum.SYSTEM_ERROR.code);
tResult.setMsg(ResultCodeEnum.SYSTEM_ERROR.msg);
return tResult;
}
public static Result error(String code, String msg) {
Result tResult = new Result();
tResult.setCode(code);
tResult.setMsg(msg);
return tResult;
}
public static Result error(ResultCodeEnum resultCodeEnum) {
Result tResult = new Result();
tResult.setCode(resultCodeEnum.code);
tResult.setMsg(resultCodeEnum.msg);
return tResult;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}