spring boot练习篇之用户登录系统【接口篇】

写在前面

抛弃JSP,只做纯粹的前后端分离项目。

作为一个资深前端工作者,想要转JavaWeb开发,无论是书籍,还是网上视频、资料,竟然没有一篇能清楚明白地讲解怎样搭建一个前后端分离项目。这让小编很是纠结了好久。好在在经过时断时续的学习Java及spring boot之后,结合小编的工作经验,终于清楚明白了如何搭建一个真正的前后端分离项目。

如果你也与我一样,不想学习JSP,只想做纯粹的前后端分离项目,那就关注我吧。

新建工程

工具:IntelliJ IDEA Ultimate 2021.1.1

spring boot练习篇之用户登录系统【接口篇】
新建工程1
spring boot练习篇之用户登录系统【接口篇】
新建工程2

知识点

Lombok是开发Java的使用插件,用来帮助开发人员简化冗长的Java代码,尤其是对POJO(Plain Ordinary Java Objects,简单的Java对象)非常有用。Lombok通过注解的方式来达到帮助程序员简化代码的目的。

编辑工程

在开始写代码之前,此时心中应该有了一个工程目录的雏形。这样你才能清楚明白应该怎样输出自己的代码。由于小编也是JavaWeb开发新手,所以初期想法比较简单。大致就是:接收前端传过来的JSON对象参数,然后进行业务处理,最后返回带结果信息的JSON对象给前端。

接收前端传过来的JSON对象。

springMVC是通过controller层来接收用户输入的数据的。所以要在项目工程目录下新建controller包,并在该包中新建User Controller类。

package com.example.rpm.controller;

import org.springframework.web.bind.annotation.*;

@RestController
public class UserController {

  @RequestMapping(value = "/login", method = RequestMethod.GET)
  public String login(String username, String password) {
    return 'Hello';
  }
}

知识点

@Rest Controller注解在类名上,作用相当于@ResponseBody加@Controller;
@RequsetMapping注解在类名或方法上,如果注解在类名上,则表示所有响应请求的方法都是以该地址作为父路径的,注解在方法上,则表示前端访问该接口【方法】的具体路径。该注解有6个属性:Params【指定Request中必须包含某些参数值,才让该方法处理】、Headers【指定Request中必须包含某些指定的header值,才能让该方法处理请求】、Value【指定请求的实际地址,指定的地址可以是URI Template模式】、Method【指定请求的Method类型,如GET、POST】、Consumes【指定处理请求的提交内容类型Content-Type,如“application/json,text/html”】、Produces【指定返回的内容类型。只有当Request请求头中的Accept类型中包含该指定类型时才返回】

依据前端传过来的数据,进行业务处理

springMVC中业务判断逻辑是在Service层,所以在项目目录下新建Service包,并在该包中新建UserService接口类。

package com.example.rpm.service;

import org.springframework.stereotype.Service;

public interface UserService {
  public String login(String name,String password);
}

在Service包中新建一个Impl包,并在该包下新建一个UserService接口类的实现类UserServiceImpl。

package com.example.rpm.service;

import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService{

  @Override
  public String login(String name,String password) {
    if (name.equals("admin") && password.equals("admin")) {
      return "Success";
    }
    return "Error";
  }
}

知识点

@Service用于声明一个业务处理类(接口类的实现类),用于标注服务层,处理业务逻辑。

返回带结果信息的JSON对象

在实际项目开发中,接口返回的数据格式通常是固定【事先约定好的】的。在这个项目中,小编也固定了一个格式。

// 异常信息
{
  "code": 999999,
  "msg":"异常信息",
  "data": null
}
// 成功信息
{
  "code": 200,
  "msg": "成功",
  "data": {
    "id": 1,
    "name": "zero"
  }
}

想要达到如此目的,我们首要要封装一个返回对象。

在项目目录下新建一个response包,并在该包中新建一个Response类。

package com.example.rpm.result;

import lombok.Data;

@Data
public class Response {
  private Number code = 200;
  private String msg = "操作成功";

  public Response() {
  }

  public Response(ExceptionMsg msg){
    this.code=msg.getCode();
    this.msg=msg.getMsg();
  }

  public Response(Number code) {
    this.code = code;
    this.msg = "";
  }

  public Response(Number code, String msg) {
    this.code = code;
    this.msg = msg;
  }

}

继续新建一个带返回数据对象的ResponseData类。

package com.example.rpm.result;

import lombok.Data;

@Data
public class ResponseData extends Response {
  private Object data;
  public ResponseData(Object data) {
    this.data = data;
  }
  public ResponseData(ExceptionMsg msg) {
    super(msg);
  }

  public ResponseData(Number code, String msg) {
    super(code, msg);
  }

  public ResponseData(Number code, String msg, Object data) {
    super(code, msg);
    this.data = data;
  }

  public ResponseData(ExceptionMsg msg, Object data) {
    super(msg);
    this.data = data;
  }

}

继续在该包中新建一个响应的枚举类ExceptionMsg。

package com.example.rpm.result;

public enum ExceptionMsg {
  SUCCESS(200,"操作成功"),
  FAILED(999999,"操作失败");
  private Number code;
  private String msg;
  private ExceptionMsg(Number code,String msg) {
    this.code = code;
    this.msg = msg;
  }

  public Number getCode() {
    return code;
  }
  public String getMsg() {
    return msg;
  }

}

知识点

枚举类类的继承

接下来就是如何把项目的工作流程串联起来。大致思路如下:Response是我们要返回的对象,那么就得更改login方法的返回值类型【String -> Response】。首先必须清楚项目的工作流程:Controller层负责接收用户输入参数,然后调用Service层的方法,进行业务逻辑处理【由于此次没有使用数据库,所以不牵扯Dao层】,Service层业务逻辑处理完成之后,返回相应的响应对象。

首先更改Service层,UserServiceImpl

package com.example.rpm.service;
import com.example.rpm.result.ExceptionMsg;
import com.example.rpm.result.Response;
import com.example.rpm.result.ResponseData;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService{

  protected Response response() {
    return new Response();
  }
  @Override
  public Response login(String name,String password) {
    if (name.equals("admin") && password.equals("admin")) {
      return response();
    }
    return new ResponseData(ExceptionMsg.FAILED);
  }
}

UserService

package com.example.rpm.service;

import com.example.rpm.result.Response;

public interface UserService {
  public Response login(String name,String password);
}

UserController

package com.example.rpm.controller;

import com.example.rpm.result.Response;
import com.example.rpm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class UserController {
  private UserService userService;

  @Autowired
  public void setUserService (UserService userService) {
    this.userService = userService;
  }

  @RequestMapping(value = "/login", method = RequestMethod.GET)
  public Response login(String username, String password) {
    return userService.login(username,password);
  }
}

到此简单的用户登录接口完成,可以启动项目,进行接口调式了。

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/java/spring-boot-login-api.html

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2021年3月8日
下一篇 2021年5月28日

相关推荐

  • Java自学之泛型

    在Java语言中,为了方便接收参数类型的统一,提供了核心类Object,利用此类对象可以接收所有类型的数据(包括基本数据类型和引用数据类型)。但是由于其所描述的数据范围过大,所以在…

    2020年12月8日
    1.3K
  • JAVA基础知识整理

    终于下定决心2020年转JAVA开发,自学之路坎坷曲折。俗话说的话,好记性不如烂笔头。如果有小伙伴们也像我一样在JAVA自学之路上徘徊,那就关注一下我的博客网站。我会不定期更新一下…

    2020年1月11日
    1.8K
  • Java自学之抽象类与接口

    面向对象程序设计中,类继承的主要作用的扩充已有类的功能。子类可以根据自己的需要选择是否要覆写父类中的方法,所以一个设计完善的父类是无法对子类做出任何强制性的覆写约定。为了解决这样的…

    2020年12月7日
    1.3K
  • JavaWeb入门案例之用户注册

    前言 之前把Java的基础知识系统的过了一遍,目前总算可以看懂Java代码了,接下来就是要学习Java开发框架(主要是springMVC)。 下面用一个用户注册的小案例,来总结一下…

    2021年1月13日
    1.7K
  • spring4.x学习之用户登录与注册

    在之前的文章中我已经把后端工程项目创建好了,接下来就是编写项目了。 首先,我先创建一个数据库。数据库使用的是MySQL,数据库管理工具用的是Navicat。 打开数据库管理工具Na…

    2019年3月21日
    2.1K
  • JAVA学习之多线程知识点整理

    1、什么是进程?什么是线程? 进程是一个应用程序。线程是一个进程中的执行场景或者执行单元。一个进程可以启动多个线程。进程之间内存独立不共享。同一个进程中的线程之间,堆内存和方法区内…

    2020年6月19日
    1.3K
  • Spring Tools学习之JAVA开发环境搭建【windows 10】

    一直以来都想学习JAVA,但是苦于找不到门路,网上学习资料要不看不懂,要不需要金钱。 终于,迫于生活与年龄的压力,下定决心,学习JAVA。 写下此文档,记录一下自己学习JAVA之路…

    2018年12月6日
    3.0K
  • 如何使用IDEA2020.2新建servlet工程

    最近自学java时,发现IDEA更新到2020.2版本时,在新建工程时,有了明显的改动。由于小编刚学到servlet,IDEA这一突然间的改动,导致小编不会新建servlet工程了…

    2020年8月17日
    6.0K
  • STS插件mybatis-generator安装及使用

    断断续续学习Java也有好长时间了,没有师傅带,没有项目练手,学习超级慢,也很烦。视频、书籍翻看了一大推,还是没有目标。 相信滴水成海,外加条条大路通罗马,只要坚持,自己终能达成目…

    2019年12月27日
    2.3K
  • Java自学之类与对象

    定义 类是由成员属性和方法组成。成员属性主要定义类的一个具体信息,实际上一个成员属性就是一个变量,而方法是一些操作的行为。类的定义基础语法如下。 一个类定义完成后并不能够被直接使用…

    2020年11月25日
    1.3K