一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情。
一、前言
- 封装返回结果,错误码、提示消息、返回数据。
- 统一的异常拦截,对业务上手动抛出的异常或者系统自己抛出的异常进行统一拦截,统一返回数据给前端。
- JWT(Json Web Token),就是接口令牌,令牌在登录成功的时候返回给前端,前端保存下来,后面所有的请求要传回令牌给服务端,服务端验证令牌来决定放不放行。并且令牌中可以保存用户ID、用户名等信息。
- 代码用到了Mybatis-Plus,可以看我之前的文章
二、目录结构
三、Maven依赖包
在pom.xml dependencies添加下面依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.5</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
<version>5.3.3.RELEASE</version>
</dependency>
-
jjwt就 Java Json Web Token
-
hutool-all 封装了很多好用的Java工具类,强烈推荐,非常好用,官网地址:Hutool — 🍬A set of tools that keep Java sweet.
-
spring-security-crypto 密码加密和解码工具
四、封装统一返回结果
CommonResult 类
public class CommonResult<T> {
private Integer code;
private String msg;
private T data;
public CommonResult(int code, String msg) {
this.code = code;
this.msg = msg;
}
public CommonResult(int code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public static <T> CommonResult<T> success(T t) {
return new CommonResult<T>(200, "操作成功", t);
}
public static <T> CommonResult<T> error(T t) {
return new CommonResult<T>(300, "操作失败", t);
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@Override
public String toString() {
return "CommonResult{" +
"code=" + code +
", msg='" + msg + ''' +
", data=" + data +
'}';
}
}
- 使用
@PostMapping("/register")
public CommonResult<Boolean> register(@RequestBody UserInfo userInfo) {
return CommonResult.success(userInfoService.register(userInfo));
}
@PostMapping("/login")
public CommonResult<String> login(@RequestBody UserInfo userInfo) {
return CommonResult.success(userInfoService.login(userInfo));
}
返回结果如下:
{
"code": 200,
"msg": "操作成功",
"data": true
}
五、统一异常拦截
GlobalExceptionHandler 类
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public CommonResult<String> exceptionHandler(Exception e) {
return CommonResult.error(e.getMessage());
}
}
- 这里只是做了Exception的处理,您可以加上自定义的异常处理。