新手练习-后台管理系统
任务十一 应用Hutool插件实现文件导入导出
任务十二 定义统一的返回接口Rusult和异常处理
任务十一我们做了一个拓展训练,主要是应用Hutool插件实现文件的导入和导出,这个功能在有的网站中不需要,数据都在数据库中进行操作。通常,商业系统需要保证接口的一致性和规范性,方法的返回值都是统一的使用一个接口,通过标识代码判断。本次任务,我们定义统一的返回接口类型,通过本次任务,大家能够:
(1)了解前后端分离,后端接口统一返回类型的重要性;
(2)熟练定义统一返回类;
(3)熟练使用统一返回类。
1.新建common包,并新建一个Result类和一个Constants接口
2. Constants接口定义几个常见返回代码
代码如下:
package com.example.demo.common;
public interface Constants {
String CODE_200="200"; //成功
String CODE_400="400"; //参数错误
String CODE_401="401"; //权限不足
String CODE_500="500"; //系统错误
String CODE_600="600"; //其他业务异常
}
3. Result类中定义几种常见返回情况
代码如下:
package com.example.demo.common;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/*接口统一返回类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private String code;//运行结果
private String msg;//告诉前端错误的原因
private Object data;//后台所携带的数据
public static Result success(){//无参返回正确
return new Result(Constants.CODE_200, "",null);
}
public static Result success(Object data){//有参返回正确
return new Result(Constants.CODE_200, "",data);
}
public static Result error(String code,String msg){ //返回失败
return new Result(code, msg,null);
}
public static Result error(){ //默认一个错误类
return new Result(Constants.CODE_500,"系统错误",null);
}
}
4. 自定义异常
新建一个exception包,自定义两个类,一个GlobalExceptionHandler,ServiceException(自定义异常)。
5. 定义GlobalExceptionHandler类
-----如果有逻辑调用 ServiceException 方法,那么这边会接收他对应的参数且去执行handle方法
package com.example.demo.exception;
import com.example.demo.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 如果抛出的的是ServiceException,则调用该方法
* @param se 业务异常
* @return Result
*/
@ExceptionHandler(ServiceException.class)
@ResponseBody
public Result handle(ServiceException se){
return Result.error(se.getCode(),se.getMessage());
}
}
6. 定义ServiceException类
package com.example.demo.exception;
import lombok.Getter;
//自定义异常
@Getter
public class ServiceException extends RuntimeException{
private String code;
public ServiceException(String code,String msg){
super(msg);
this.code=code;
}
}
统一的返回接口类型定义好了之后,以后任务的所有方法返回都用Result,这样前端进行接口返回判断的时候也就统一了。
具体的运行流程图解是:
注意,因为不能在编辑区域打开两个接口,这里打开的是UserService,实际上第一步是先到UserController,然后调用UserService中的login方法,然后判断是否抛异常…这里的图解没有画错。
小伙伴如果要看具体的应用,请看任务十三 登录验证的时候就会用到统一返回接口类型了。也就是说,方法返回的都是一个code,根据code代码就知道后端操作的结果。
任务总结:
通过本次任务,大家能够:
学会springboot-接口返回统一规范封装的方法。