SpringBoot2.x+Spring5+Mybits3.x后期使用vue前端构建前后端分离-4 开发接口的规范化 登陆post请求开发

存在的问题:协议未统一,缺少业务状态码

JSONData工具类开发(进行再次包装,添加业务状态码)

package work.flyrun.demoproject1.utils;

/**
 * @Program: demo-project1
 * @Description: 接口开发规范
 * @Author: chen
 * @Dates: 2020-11-08-14-12
 * @Version:
 **/

public class JsonData {
    private int code;

    private Object data;

    private String msg;

    public int getCode() {
        return code;
    }

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

    public Object getData() {
        return data;
    }

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

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public JsonData(int code, Object data) {
        this.code = code;
        this.data = data;
    }

    public JsonData(int code, Object data, String msg) {
        this.code = code;
        this.data = data;
        this.msg = msg;
    }
//    快速构建静态状态
    public static JsonData buildSuccess(Object data){
        return new JsonData(0,data);
    }

    public static JsonData buildError(String msg){
        return new JsonData(-1,"",msg);
    }

    public static JsonData buildError(int code, String msg){
        return new JsonData(code,"",msg);
    }
}

修改控制器返回值为 JsonData.buildSuccess(list)

POST请求

一般的开发get和post即可

put和delete请求都可以使用post

创建UserController

@RestController
@RequestMapping("/api/v1/pub/user")
public class UserController {

    @PostMapping("login")
    public JsonData login(User user){
        System.out.println(user.toString());
        return JsonData.buildSuccess("");
    }

}

当选择x-www-form-urlencoded是为form表单请求(不建议)以上方式会请求成功

我们现有app和网页端开发大部分都为json的形式提交,那么我们需要选择raw 然后选择json数据方式(不成功  需要加一个注解@RequestBody)

package work.flyrun.demoproject1.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import work.flyrun.demoproject1.domain.User;
import work.flyrun.demoproject1.utils.JsonData;

/**
 * @Program: demo-project1
 * @Description: 用户登陆控制器
 * @Author: chen
 * @Dates: 2020-11-08-14-26
 * @Version:
 **/
@RestController
@RequestMapping("/api/v1/pub/user")
public class UserController {

    @PostMapping("login")

    public JsonData login(@RequestBody User user){
        System.out.println(user.toString());
        return JsonData.buildSuccess("");
    }

}

不使用数据库,模拟登陆

当再mapper访问层搜寻到的用户名和密码正确时,返回一个token值,现有的服务器大多都是采用token进行判断登陆过期等

package work.flyrun.demoproject1.mapper;

import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.RequestMapping;
import work.flyrun.demoproject1.domain.User;

import java.util.HashMap;
import java.util.Map;

/**
 * @Program: demo-project1
 * @Description: 用户模块服务访问层
 * @Author: chen
 * @Dates: 2020-11-08-13-40
 * @Version:
 **/
@Repository
public class UserMapper {
    private static Map<String, User> userMap=new HashMap<>();
    static {
        userMap.put("admin",new User(1,"admin","admin"));
        userMap.put("username",new User(2,"username","pwd"));
    }

    public User login(String username,String pwd){
        User user = userMap.get(username);

        if (user == null){
            return null;
        }
        if (user.getPwd().equals(pwd)){
            return user;
        }
        return null;
    }
}
package work.flyrun.demoproject1.service;

/**
 * @Program: demo-project1
 * @Description: 用户业务层
 * @Author: chen
 * @Dates: 2020-11-08-13-43
 * @Version:
 **/

public interface UserService {
    String login(String username,String pwd);
}
package work.flyrun.demoproject1.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import work.flyrun.demoproject1.domain.User;
import work.flyrun.demoproject1.mapper.UserMapper;
import work.flyrun.demoproject1.service.UserService;

import java.sql.SQLOutput;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * @Program: demo-project1
 * @Description: 用户业务层实现
 * @Author: chen
 * @Dates: 2020-11-08-13-44
 * @Version:
 **/
@Service
public class UserServiceImpl implements UserService {

    private static Map<String,User> sessionMap = new HashMap<>();

    @Autowired
    private UserMapper userMapper;
    @Override
    public String login(String username, String pwd) {
        User user = userMapper.login(username,pwd);
        if (user == null){
            return null;
        }else{
            String token = UUID.randomUUID().toString();
            System.out.println(token);
            sessionMap.put(token,user);
            return token;
        }
    }
}
package work.flyrun.demoproject1.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import work.flyrun.demoproject1.domain.User;
import work.flyrun.demoproject1.service.UserService;
import work.flyrun.demoproject1.utils.JsonData;

/**
 * @Program: demo-project1
 * @Description: 用户登陆控制器
 * @Author: chen
 * @Dates: 2020-11-08-14-26
 * @Version:
 **/
@RestController
@RequestMapping("/api/v1/pub/user")
public class UserController {

    @Autowired
    public UserService userService;
    @PostMapping("login")

    public JsonData login(@RequestBody User user){
        System.out.println(user.toString());
        String token = userService.login(user.getUsername(),user.getPwd());
        return token !=null?JsonData.buildSuccess(token):JsonData.buildError("账号密码错误");
    }

}

其中用三目条件判断token的状态返回不同的状态信息

使用postman进行登陆信息测试,返回的json中的data由token数据,成功

下一章介绍springboot中的RequesBody方式数组提交

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值