部分表的基本接口开发
一、login表基本接口开发
1、接口开发
在Spring Boot项目中的repository下创建LoginRepository.java,写入以下代码:
package com.example.demo.repository;
import com.example.demo.entity.Login;
import org.springframework.data.jpa.repository.JpaRepository;
public interface LoginRepository extends JpaRepository<Login, String> {
}
在controller下创建LoginController.java,写入以下代码:
package com.example.demo.controller;
import com.example.demo.entity.Login;
import com.example.demo.repository.LoginRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/login")
public class LoginController {
@Autowired
private LoginRepository loginRepository;
@GetMapping("/findall")
public List<Login> findall() {
return loginRepository.findAll();
}
@GetMapping("/findbyid/{id}")
public Login findbyid(@PathVariable("id") String id) {
return loginRepository.findById(id).get();
}
@DeleteMapping("/deletebyid/{id}")
public String deletebyid(@PathVariable("id") String id) {
loginRepository.deleteById(id);
return "Success delete!";
}
@GetMapping("/count")
public Long count() {
return loginRepository.count();
}
}
注解@RequestMapping 用来映射请求,也就是通过它来指定控制器可以处理哪些URL请求。
注解@GetMapping用于处理请求方法的GET类型。
注解@DeleteMapping用于处理请求方法的DELETE类型。
注解@PostMapping用于处理请求方法的POST类型,但我在现阶段的后端开发中并未涉及,之后应该会涉及到。
其中包含了三个GET方法和一个DELETE方法,根路径是/login,接口/login/findall用来返回login表中的所有数据,接口/login/findid根据主键查询数据并返回,接口/login/deletebyid用来根据主键删除数据,接口/login/count用来返回表中的记录数,也就是行数。
2、接口测试
打开Navacat,连接dituquan数据库,在login表中插入以下两条测试数据:
运行Spring Boot项目,打开Postman进行接口测试。
测试http://localhost:9001/login/findall,返回结果如下:
[
{
"username": "111",
"password": "111",
"identity": "111",
"head_img": "111",
"province": "111"
},
{
"username": "sss",
"password": "sss",
"identity": "sss",
"head_img": "sss",
"province": "sss"
},
{
"username": "ttt",
"password": "ttt",
"identity": "ttt",
"head_img": "ttt",
"province": "ttt"
}
]
可以看到,返回结果中包含了最初添加进login表中的所有3条数据!
测试http://localhost:9001/login/findbyid/111,返回结果如下:
{
"username": "111",
"password": "111",
"identity": "111",
"head_img": "111",
"province": "111"
}
可以看到,返回结果是主键username为111的数据!
换个参数继续测试,http://localhost:9001/login/findbyid/sss,返回结果如下:
{
"username": "sss",
"password": "sss",
"identity": "sss",
"head_img": "sss",
"province": "sss"
}
可以看到,返回结果是主键username为sss的数据!
测试http://localhost:9001/login/deletebyid/sss,返回结果如下:
Success delete!
打开Navacat查看login表:
可以看到数据“sss”成功删除!
测试接口http://localhost:9001/login/count,返回结果如下:
2
很明显,接口返回了表login中记录的总个数!
3、遇见的问题
Spring Boot项目给出一个关于.get()方法的警告,如下:
@GetMapping("/findbyid/{id}")
public Login findbyid(@PathVariable("id") String id) {
return loginRepository.findById(id).get();
}
警告:‘Optional.get()’ without ‘isPresent()’ check。读字面意思好像是说没有进行存在性检查,猜测与数据库中不包含主键对应的记录时的情况有关,进一步百度,得到如下结果:其返回的是Optional类型,该类型是为了规避NULL错误,应该使用orElse(“如果值为null的替代值”) 替代 get() 。
打开Postman进行测试
测试接口http://localhost:9001/login/findbyid/222,其中主键值为“sss”,但是login表中并不存在该记录,得到返回结果如下:
{
"timestamp": "2021-03-28T12:50:07.062+00:00",
"status": 500,
"error": "Internal Server Error",
"message": "",
"path": "/login/findbyid/222"
}
返回的status为500,明显出错。
于是修改.get()为.orElse(null),如下:
@GetMapping("/findbyid/{id}")
public Login findbyid(@PathVariable("id") String id) {
return loginRepository.findById(id).orElse(null);
}
再次测试接口http://localhost:9001/login/findbyid/222,其中主键值为“sss”,但是login表中并不存在该记录,得到返回结果为空(接口并没有报错)。
二、总结
这是很关键的一周,完事开头难,通过这一周的学习,在网上搜教程,在哔哩哔哩上看一些相关的Spring Boot项目教学视频,对Spring Boot项目的开发有了初步的掌握,学会了如何具体的开发接口,并进行了接口开发的尝试,开发了两个表的一些基本的接口,设计到了GET方法和DELETE方法,在接下来的开发中,想必还会涉及到其他类型的方法,还会学到其他的接口代码编写方式。这一周只是针对两个表编写了一些很基本的接口,随着项目的进行,前端同学针对这两个表肯定还会有更多的需求,我还会再编写更多的不同需求的接口。任重道远,继续努力!