Spring Boot专题2—状态码组件开发
目前市场上主流的开发模式都是采用前后端分离的方式,前端使用Vue框架,后端SpringBoot,后端一般使用Restful api类型的接口,常用的请求方式为get,post,delete,put等
为此,我们通常会为接口设计一个通用的数据返回格式,且与业务无关,包括返回状态码code,消息提示message,和返回体data。
对于一些通用的工具,一般放在一个单独的工具包内,此处我们新建一个common工具包。
1. 定义ErrorCode接口
//在common包下新建ErrorCode
package com.example.demo.common;
public interface ErrorCode {
long getCode(); //获取状态码
String getMessage(); //获取message
}
2. 定义常见状态码
对于封装常见的状态码以及对应的文字信息,因为状态码和文字信息都是一一对应的,我们一般采用枚举的方式,枚举也是一种特殊的类。
package com.example.demo.common;
//定义CommonCode,并实现ErrorCode接口
public enum CommonCode implements ErrorCode{
SUCCESS(200, "success"),
FAILURE(400, "参数异常");
private final long code;
private final String message;
//构造函数,如果不想该类被实例化,加private将构造函数私有化
private CommonCode(long code, String message) {
this.code = code;
this.message = message;
}
//实现接口中ErrorCode接口中定义的方法
@Override
public long getCode() {
return this.code;
}
@Override
public String getMessage() {
return this.message;
}
}
3. 定义通用返回结果
package com.example.demo.common;
import lombok.Getter;
@Getter
public class CommonResult<T> {
private final long code;
private final String message;
private final T data;
//当不知道data是什么数据类型的时候,可以使用泛型技术
public CommonResult(long code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public static <T> CommonResult success(T data) {
return new CommonResult<>(CommonCode.SUCCESS.getCode(), CommonCode.SUCCESS.getMessage(), data);
}
public static <T> CommonResult success(T data, String message) {
return new CommonResult<>(CommonCode.SUCCESS.getCode(), message, data);
}
public static <T> CommonResult fail(String message) {
return new CommonResult<>(CommonCode.FAILURE.getCode(), message, null);
}
public static <T> CommonResult fail(ErrorCode resultCode) {
return new CommonResult<>(resultCode.getCode(), resultCode.getMessage(), null);
}
public static <T> CommonResult fail() {
return fail(CommonCode.FAILURE);
}
}
4. 修改controller
package com.example.demo.controller;
import com.example.demo.common.CommonResult;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
//接收客户端请求
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/userid")
public CommonResult getUserByID(@RequestParam("id") int id) {
User user = userService.getUserByID(id);
return CommonResult.success(user);
}
@GetMapping("/username")
public CommonResult getUserByName(@RequestParam("username") String username) {
return CommonResult.success(userService.getUserByName(username));
}
@GetMapping("/age")
public CommonResult getUserByAge(@RequestParam("age") int age) {
return CommonResult.success(userService.getUserByAge(age));
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public CommonResult insertUser(@RequestBody User user) {
userService.insertUser(user);
return CommonResult.success(user);
}
@RequestMapping(value = "/update", method = RequestMethod.PUT)
public CommonResult updateUserByID(@RequestBody User user) {
userService.upDateUserByID(user);
return CommonResult.success(null);
}
@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
public CommonResult deleteUserByID(@RequestParam("id") int id) {
userService.deleteUserByID(id);
return CommonResult.success(null);
}
}