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);
}
}