Web开发
- Web开发的简介
- 开始上手
- JSON的支持
- RESTful的支持
- 快速上手:
- MockMvc
Web开发的简介
- 自从B/S架构(Browser/Server,浏览器/服务器)被发明以来,因为具有跨平台、易移植、方便使用等特点,迅速成为技术架构的首选,前端Web技术迅速发展起来。
- Spring Boot对Web开发的支持很全面,包括开发、测试和部署阶段都做了支持。
- spring-boot-starter-web 是Spring Boot队Web开发提供支持的组件,主要包括JSON、RESTful,作为tomcat内嵌容器等等功能。
开始上手
- 首先创建构建项目:
在前面的博客中创建一个Spring Boot项目已经讲过创建项目,这边就不详细说明了。 - 添加依赖包(启动器):
首先配置好pom.xml文件,添加需要和相对应的依赖包即可。
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.18</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- lombok:支持getter/setter生成
- mysql-connector-java:MySql版本
- mybatis-plus-boot-starter:mybatis-plus的版本
- spring-boot-starter-test:Spring Boot test启动器
- spring-boot-starter-web:Spring Boot web启动器
还包括一些其他的依赖,如jstl和web mvc还有json等等
<!-- jstl依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- jsp引擎依赖,springboot内置tomcat没有依赖-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
- Model准备:
提供基本的CRUD功能
存放业务逻辑的一些代码
public interface UserService {
//登录
public User login(String usrName, String usrPassword);
//新增用户
public int addUser(User user);
//删除用户
public int deleteUser(Long usrId);
//修改用户
public int updateUser(User user);
//根据主键Id查询用户信息
public User getUser(Long usrId);
//查询所有用户信息
public List<User> findAllUsers();
}
JSON的支持
JSON是一种轻量级的数据交换格式,易于阅读和编写,同事也易于机器解析和生成。JSON采用完全独立于语言的文本格式。
- 控制器的准备:
public class UserController {
@Resource
private UserService userService;
//最普遍的方法
@RequestMapping(value = "/getUser", method = RequestMethod.GET)
public User getUser(Long usrId) {
User user = userService.getUser(usrId);//根据id查询
System.out.println(user);
return user;
}
}
- @RestController 注解就相当于@ResponseBody+@Controller的组合,数据是返回JSON格式的。
- @RequestMapping(value = “crmLogin”),默认是GET请求方式。
RESTful的支持
RESTful是目前最流行的一种互联网软件架构。
REST(Representaional State Transfer)
定义了他对软件架构的原则REST
在Spring Boot中对RESTful的支持:
Spring Boot全面支持开发RESTful程序,通过不同的注解来支持前端的请求,除了一些常用的注解外,还有一些Spring Boot的组合注解。
- @GetMapping,处理Get请求
- @PostMapping,处理Post请求
- @PutMapping,用于更新资源
- @DeleteMapping,处理删除请求
- @PatchMapping,用于更新部分资源
快速上手:
请求 | 地址 | 说明 |
GET | /user | 说明所有数据 |
GET | /user/id | 根据id查询 |
Put | /user | 修改 |
Delete | /user/id | 删除 |
POST | /user | 新增 |
话不多说,上代码
@RestController
@Slf4j
public class UserController {
@Resource
private UserService userService;
// @GetMapping== @RequestMapping
@GetMapping(value = "/user")
public List<User> findAllUser() {
List<User> list = userService.findAllUsers();//查询所有
return list;
}
//使用REST风格,根据查询id
@GetMapping(value = "/user/getUser/{id}")
public User getUser(@PathVariable("id") Long usrId) {
User user = userService.getUser(usrId);
return user;
}
@PostMapping(value = "/user/addUser")
// @ResponseBody
public User addUser(User user) {
user.setUsrName("测试用户153");
user.setUsrPassword("123456");
user.setUsrRoleId(8L);
user.setUsrFlag(1);
userService.addUser(user);
if (userService.addUser(user) > 0) {
System.out.println("成功:");
log.info(user.toString());
} else {
System.out.println("失败:");
log.info(user.toString());
}
System.out.println(user);
return user;
}
@PutMapping(value = "/user/updateUser")
public User updateUser(User user) {
//修改
user = userService.getUser(28L);
user.setUsrName("测试用户152");
user.setUsrPassword("123456");
user.setUsrRoleId(8L);
user.setUsrFlag(1);
if (userService.updateUser(user) > 0) {
System.out.println("成功:");
log.info(user.toString());
} else {
System.out.println("失败:");
log.info(user.toString());
}
return user;
}
@DeleteMapping(value = "/user/deleteUser/{id}")
public User deleteUser(@PathVariable("id") Long usrId) {
User user = new User();
if (userService.deleteUser(usrId) > 0) {
System.out.println("成功:");
log.info(user.toString());
} else {
System.out.println("失败:");
log.info(user.toString());
}
System.out.println(user);
return user;
}
}
此时可以看到执行结果:
接下来我们使用Web测试的支持
MockMvc
这是官网的网址可以可以进行下载
MockMvc可以通过PostMan工具或自己写一些Http 请求进行测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Resource
private WebApplicationContext wac;//注入Spring Web上下文的环境
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
// System.out.println(mockMvc);
}
}
- @Before代表在测试启动时候需要提前加载的内容,这里是提前加载MVC环境。
测试根据id查询数据(get请求):
@Test
public void testGetUser() throws Exception {
//查询
String mvcResult =
mockMvc.perform(MockMvcRequestBuilders.get("/user/getUser/27"))//测试地址
.andReturn().getResponse().getContentAsString();//返回响应主体内容
System.out.println("mvcResult===" + mvcResult);
System.out.println(mvcResult);
}
测试效果:
测试根据新增数据(post请求):
@Test
public void testAddUser() throws Exception {
//新增
//构造请求参数
final MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("usrName", "RESTful");
params.add("usrPassword", "123456");
params.add("usrRoleId", "2");
params.add("usrFlag", "1");
mockMvc.perform(MockMvcRequestBuilders.post("/user/addUser").params(params))
//isOk ==200
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print());
}
总结:通过RESTful的方式让更好的遵守了互联网软件架构的原则。