SpringBoot 2.7教程:SpringBoot 整合 Web 项目搭建及实践应用-2022年最新图文版本

SpringBoot 2.7教程:SpringBoot + Web 项目搭建及实践应用-2022年最新图文版本

SpringBoot 2.7教程:SpringBoot + Web 项目搭建,异常捕获处理-2022年最新图文版本

SpringBoot 2.7教程:SpringBoot + Mysql 项目应用-2022年最新图文版本

SpringBoot 2.7教程:SpringBoot 集成 jsp 页面开发 -2022年最新图文版本

SpringBoot 2.7教程:SpringBoot 实现文件上传,图片上传并显示功能-2022年最新图文版本

SpringBoot 2.7教程:springboot 设置全局字符编码,解决乱码问题-2022年最新图文版

SpringBoot 2.7教程:SpringBoot mybatis 多数据源的整合方法-2022年最新图文版本

SpringBoot 2.7教程:SpringBoot 整合 RocketMQ 项目搭建-2022年最新图文版本

SpringBoot 2.7教程:SpringBoot 整合 RabbitMQ 项目搭建-2022年最新图文版本

SpringBoot 2.7教程:SpringBoot 整合 MongoDB 项目搭建-2022年最新图文版本

SpringBoot 2.7教程:SpringBoot 整合 Redisson 项目搭建-2022年最新图文版本

SpringBoot 2.7教程:SpringBoot 整合 Redis 项目搭建-2022年最新图文版本

本章主要目标: 

1.初识SpringBoot

2.使用版本SpringBoot搭建Web项目,实现测试类和方法

3.学习使用Restful接口格式

4.项目实践(入参、出参、API返回、错误码、异常)

首先我们打开官方网站:Spring Boot(小黑板敲重点,一定要记住这个网址,以后会经常光顾)

当前最新的版本是2.7,下面我们开始进行搭建系统。

一、右键新建Module

  

项目实践:

一、入参校验,新建controller.form.loginForm。

添加两个入参,userName、Password

package com.xiaoma.usercenter.controller.form;

import javax.validation.constraints.NotNull;

/**
 * @author fenghaikuan
 * @description 接收登录提交的数据
 * @className LoginForm
 */
public class LoginForm {
    @NotNull
    private String userName;
    @NotNull
    private String password;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "UserForm{" +
                "userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

二、出参管理,新建controller.vo.UserVO

添加三个入参,userId、userName、userLevel

package com.xiaoma.usercenter.controller.vo;

/**
 * @author fenghaikuan
 * @description TODO
 * @className UserVO
 */
public class UserVO {
    private Integer userId;
    private String userName;
    private Integer userLevel;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getUserLevel() {
        return userLevel;
    }

    public void setUserLevel(Integer userLevel) {
        this.userLevel = userLevel;
    }
}

三、统一错误码

package com.xiaoma.usercenter.code;
/**
 * @author fenghaikuan
 * 0 请求成功
 * 99999 未知失败
 * 1开头为对通用错误信息
 * 2开头为输入参数错误
 * 3开头为业务调用错误
 * 4开头为数据库数据业务错误
 * 5开头为缓存调用错误
 * @description 基础返回码
 * @className BaseCode
 */
public enum CommonCode {
    /**
     * 返回码
     */
    SUCCESS(0, "succ"),
    FAIL(10000, "通用错误信息"),
    SIGN_FAIL(10001, "签名错误"),
    TIME_FAIL(10002, "时间戳超时错误"),
    TOKEN_FAIL(10003, "token错误"),
    AUTH_FAIL(10004, "权限不足"),

    PARAM_FAIL(20000, "参数错误"),
    PARAM_EMPTY_ERROR(20001, "参数为空"),
    PARAM_PATTERN_ERROR(20002, "参数格式不对"),

    FAILED(99999, "系统繁忙,请稍后再试.");
    /**
     * 错误码
     */
    private int code;
    /**
     * 错误信息
     */
    private String message;

    CommonCode(int code, String message) {
        this.code = code;
        this.message = message;
    }
    public int getCode() {
        return code;
    }
    public String getMessage() {
        return message;
    }
}

四、统一Api返回结构

package com.xiaoma.usercenter.response;

import com.xiaoma.usercenter.code.CommonCode;

import java.io.Serializable;

/**
 * @className: Result
 * @description: Api接口返回结构
 * @version: 1.0.0
 * @author: fenghaikuan
 * @date: 2020/7/10 11:10 上午
 */

public class ApiResult<T> implements Serializable {
    private static long serialVersionUID= -6510012126074903516L;
    private int code;
    private String message;
    private T data;
    /**
     * 无参构造函数
     */
    protected ApiResult() {

    }

    /**
     * code和message构造函数
     * @param code
     * @param message
     */
    protected ApiResult(int code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 全参构造函数
     * @param code
     * @param message
     * @param data
     */
    protected ApiResult(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 成功返回结果
     */
    public static <T> ApiResult<T> success() {
        return new ApiResult<T>(CommonCode.SUCCESS.getCode(), CommonCode.SUCCESS.getMessage());
    }

    /**
     * 成功返回结果
     *
     * @param data 返回的数据
     */
    public static <T> ApiResult<T> success(T data) {
        return new ApiResult<T>(CommonCode.SUCCESS.getCode(), CommonCode.SUCCESS.getMessage(), data);
    }

    /**
     * 失败返回结果
     */
    public static <T> ApiResult<T> failed(CommonCode commonCode) {
        return new ApiResult<T>(commonCode.getCode(), commonCode.getMessage(), null);
    }

    /**
     * 失败返回结果 通用 code 99999
     *
     * @param message 提示信息
     */
    public static <T> ApiResult<T> failed(String message) {
        return new ApiResult<T>(CommonCode.FAILED.getCode(), message, null);
    }

    /**
     * 失败返回结果
     *
     * @param commonCode 错误码
     * @param message  自定义错误信息
     */
    public static <T> ApiResult<T> failed(CommonCode commonCode, String message) {
        return new ApiResult<T>(commonCode.getCode(), message, null);
    }

    /**
     * 失败返回结果
     *
     * @param code    自定义错误码
     * @param message 自定义错误信息
     */
    public static <T> ApiResult<T> failed(int code, String message) {
        return new ApiResult<T>(code, message, null);
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

五、新建Controller

package com.xiaoma.usercenter.controller;

import com.xiaoma.usercenter.controller.form.LoginForm;
import com.xiaoma.usercenter.controller.vo.UserVO;
import com.xiaoma.usercenter.response.ApiResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * @author fenghaikuan
 * @description TODO
 * @className UserController
 */
@RestController
public class UserController {
    /**
     * DefaultExceptionHandler LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);
    @PostMapping("/user/login")
    public ApiResult<UserVO> userGet(@Validated @RequestBody LoginForm loginForm){

        LOGGER.info("提交的用户数据为:"+ loginForm.toString());
        UserVO userVO = new UserVO();
        userVO.setUserId(1);
        userVO.setUserName(loginForm.getUserName());
        userVO.setUserLevel(10);
        return ApiResult.success(userVO);
    }
}

使用PostMan测试


版权声明:本文为f88069684原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。