创建项目,划分好对应包的模块
- 创建项⽬
- 配置启动类
- 建⽴对应的包,先建⽴这些包,其他⽤到再补充
- controller
- service
- dao(mapper)
- domain
- utils
- 初始化数据开发:视频、章、默认⽤户信息
请求接口的实战
GET请求
场景:⼀般的查询接⼝就是get请求 注解:@GetMapping = @RequestMapping(method = RequestMethod.GET)
- 注解的组合
@GetMapping = @RequestMapping(method = RequestMethod.GET)
@PostMapping = @RequestMapping(method = RequestMethod.POST)
@PutMapping = @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)
开发查询列表的操作
- domain创建实体类,给予相应的属性和方法
public class Video {
private int id;
private String title;
private String summary;
private int price;
private String coverImg;
private Date createTime;
public Video() {
}
public Video(int id, String title) {
this.id = id;
this.title = title;
this.createTime=new Date();
}
- 在Mapper中模拟一个数据库,并且执行操作返回数据
@Repository
public class VideoMapper {
//模拟数据库数据
private static Map<String, Video> videoMap = new HashMap<>();
static {
videoMap.put("1",new Video(1,"吉吉波奇"));
videoMap.put("2",new Video(2,"菲尔"));
videoMap.put("3",new Video(3,"jjbq"));
videoMap.put("4",new Video(4,"junko"));
videoMap.put("5",new Video(5,"啦啦啦"));
}
//请求查询所有数据
public List<Video> findAllVideo(){
List<Video> videoList = new ArrayList<>();
videoList.addAll(videoMap.values());
return videoList;
}
}
- service创建接口以及实现类
//接口
public interface VideoService {
public List<Video> findAll();
}
//实现类
@Service
public class VideoServiceImpl implements VideoService {
@Autowired
private VideoMapper videoMapper;
@Override
public List<Video> findAll() {
List<Video> allVideo = videoMapper.findAllVideo();
return allVideo;
}
}
- controller调用服务
@RestController
@RequestMapping("api/video")
public class VideoController {
@Autowired
private VideoService videoService;
@RequestMapping("findAll")
public List<Video> findAllVideo(){
List<Video> all = videoService.findAll();
return all;
}
}
在postman中获取数据,可以成功显示
在请求接口的改进思路
状态码
我们上面能够实现数据的返回,但是在对接前端的时候,是否应该给一个状态码用来标识是否成功返回数据,统一协议
自定义返回对象,统一协议
- 在utils包下创建并使用JSONData工具类
public class JsonData {
private int code;
private Object data;
private String 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(String msg,int code){
return new JsonData(code,"",msg);
}
- 然后只需要在controller中的方法中调用
@RequestMapping("findAll2")
public Object findAllVideo2(){
List<Video> all = videoService.findAll();
return JsonData.buildSuccess(all);
}
POST请求校验用户名与密码
http的post请求
- POST请求-form表单
- 场景:表单提交,如果不⽤细分PUT/DELETE⽅法,则都可以⽤POST
- 注解:@PostMapping = @RequestMapping(method = RequestMethod.POST)
- 开发功能:账号密码提交登录接⼝,form表单形式
开发登录的操作
- domain
public class User {
private int id;
private String username;
private String password;
- mapper
@Repository
public class UserMapper {
private static Map<String, User> userMap = new HashMap<>();
static {
userMap.put("jjbq",new User(1,"jjbq","123123"));
userMap.put("junko",new User(2,"junko","111111"));
userMap.put("hhh",new User(3,"hhh","123"));
}
public User login(String username,String password){
User user = userMap.get(username);
if (user == null ){
return null;
}
if (user.getPassword().equals(password)){
return user;
}
return null;
}
}
- service
public interface UserService {
public String login(String username,String password);
}
@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 password ) {
User user = userMapper.login(username,password);
if (user==null){
return null;
}else {
String token = UUID.randomUUID().toString();
sessionMap.put(token,user);
return user.toString()+":"+token;
}
}
}
- controller
@RestController
@RequestMapping("api/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("login")
public JsonData login(@RequestBody User user){
String login = userService.login(user.getUsername(), user.getPassword());
if (StringUtils.isEmpty(login)){
return JsonData.buildError("用户名密码错误");
}else {
return JsonData.buildSuccess(login);
}
}
}