抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文学习了如何在SpringMVC中使用REST风格的请求和响应。

环境

Windows 10 企业版 LTSC 21H2
Java 1.8
Tomcat 8.5.50
Maven 3.6.3
Spring 5.2.25.RELEASE

1 Maven

需要在Maven引入相关依赖:

pom.xml
1
2
3
4
5
6
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.1</version>
</dependency>

实体类需要默认构造函数,或者显示声明空参构造函数。

2 Filter

默认情况只支持GET和POST请求,需要添加Filter支持其他请求类型:

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Filter[] getServletFilters() {
// 注册字符编码过滤器
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setEncoding("UTF-8");
encodingFilter.setForceEncoding(true);
// 注册隐藏HTTP方法过滤器
HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
// 设置过滤器
return new Filter[] {encodingFilter, hiddenHttpMethodFilter};
}
// ...
}

3 Controller

按照REST风格设计请求映射:

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@RestController
@RequestMapping("/api/user")
public class UserRest {
// 获取用户列表
// GET /api/user
@GetMapping
public CommonResult<List<User>> getUserList() {
List<User> userList = new ArrayList<>();
userList.add(new User(1, "张三"));
userList.add(new User(2, "李四"));
return CommonResult.success(userList);
}
// 获取特定用户
// GET /api/user/1
@GetMapping("/{id}")
public CommonResult<User> getUser(@PathVariable Integer id) {
User user = new User(id, "张三");
return CommonResult.success(user);
}
// 创建用户
// POST /api/user JSON.stringify({id: 1, name: '张三'})
@PostMapping
public CommonResult<User> createUser(@RequestBody @Valid User user) {
return CommonResult.success(user);
}
// 更新用户
@PutMapping
// POST /api/user?_method=PUT JSON.stringify({id: 1, name: '张三'})
public CommonResult<User> updateUser(@RequestBody @Valid User user) {
return CommonResult.success(user);
}
// 删除用户
@DeleteMapping("/{id}")
// POST /api/user/1?_method=DELETE
public CommonResult<Integer> deleteUser(@PathVariable Integer id) {
return CommonResult.success(id);
}
}

评论