商城项目
一、统一的结果集处理
1.1新建ResultEnum枚举类
定义数据类型、添加构造方法、定义枚举类型()
@Getter
public enum ResultEnum {
SUCCESS(200,"成功"),
FAIL(500,"失败"),
private Integer code;
private String message;
//通过构造方法来对枚举进行赋值
ResultEnum(Integer code,String message){
this.code = code;
this.message = message;
}
}
1.2新建统一的Result结果集
定义数据类型、添加枚举类构造方法
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
//状态码
private Integer code;
//信息
private String message;
//数据
private Object data;
//枚举类型,不带数据的结果集
public Result(ResultEnum resultEnum){
this.code = resultEnum.getCode();
this.message = resultEnum.getMessage();
}
//枚举类型,不带数据的结果集
public Result(ResultEnum resultEnum,Object data){
this.code = resultEnum.getCode();
this.message = resultEnum.getMessage();
this.data = data;
}
}
1.3新建ResultUtil结果集工具类
不懈怠数据䣌枚举构造、携带数据的枚举构造
//工具类的方法统一是静态方法
public class ResultUtil {
//不携带数据的枚举构造
public static Result success(ResultEnum resultEnum){
return new Result(resultEnum);
}
//携带数据的枚举构造
public static Result success(ResultEnum resultEnum, Object data){
return new Result(resultEnum,data);
}
//不携带数据的枚举构造
public static Result fail(ResultEnum resultEnum){
return new Result(resultEnum);
}
//携带数据的枚举构造
public static Result fail(ResultEnum resultEnum,Object data){
return new Result(resultEnum,data);
}
}
1.4新建TestController测试类
添加@RestController注解、新建测试方法、添加@GetMapping注解、启动测试
@RestController
public class TestController {
@GetMapping("/test1")
public Result test1(){
return ResultUtil.success(ResultEnum.SUCCESS,"hello,world");
}
}
二、统一的异常处理
2.1 404页面处理
找不到映射器抛异常设置为true、视图映射器设置为false
# 处理404页面
spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false
2.2新建全局异常类GlobalException
定义成员(结果枚举ResultRnum)、带枚举的构造方法
@Data
public class GlobalException extends RuntimeException{
private ResultEnum resultEnum;
public GlobalException(ResultEnum resultEnum){
super();
this.resultEnum = resultEnum;
}
}
2.3新建全局异常处理器GlobalExceptionHandler
404异常处理、系统异常、业务异常
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = NoHandlerFoundException.class)
public Result noHandlerFoundExceptionHandler(NoHandlerFoundException exception){
log.error("404:{}", exception.getMessage());
return ResultUtil.fail(ResultEnum.RESOURCES_NOT_FOUND);
}
@ExceptionHandler(value = Exception.class)
public Result systemException(Exception exception){
log.error("系统异常:{}", exception.getMessage());
return ResultUtil.fail(ResultEnum.EXCEPTION);
}
@ExceptionHandler(value = GlobalException.class)
public Result globalException(GlobalException exception){
log.error("业务异常:{}", exception.getMessage());
return ResultUtil.fail(exception.getResultEnum());
}
}
2.4编写测试
抛出全局异常(系统异常)、抛出业务异常、启动测试异常处理
@RestController
public class TestController {
@GetMapping("/test1")
public Result test1(){
return ResultUtil.success(ResultEnum.SUCCESS,"hello,world");
}
@GetMapping("/test2")
public Result test2(){
throw new GlobalException(ResultEnum.EXCEPTION);
}
@GetMapping("/test3")
public Result test3(){
throw new GlobalException(ResultEnum.ERROR);
}
}