存在的问题:协议未统一,缺少业务状态码
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方式数组提交