Spring Boot专题2—状态码组件开发

wuchangjian2021-11-04 04:01:22编程学习

目前市场上主流的开发模式都是采用前后端分离的方式,前端使用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);
    }
}

5. 接口调试

在这里插入图片描述

相关文章

怎么样可以给你的网站套上Cloudflare

文章目录 Cloudflare 是什么准备工作开搞 Cloudfla...

求水仙花数

“水仙花数”是指这样的数,其各位数字的立方和等于该数本身。编写程序求100...

React开发(276):dva 处理成数组的方法

export function getListDefault(data, key) {...

前端-JS-Math内置对象

// 随机数 let rean1 = Math.r...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。