一、Spring MVC
一、设置接口
1.@Controller
2.@ResponseBody
- 返回JSON格式
3.@RestController
- @RestController = @Controller + @ResponseBody
- 返回JSON格式
4.@RequestMapping
- 响应任意请求方法
5.@xxxMapping
- @GetMapping = @RequestMapping(method = RequestMethod.GET)
- 响应指定请求方法
二、接收参数
1.无注解
@GetMapping("/NonAnnotation")
public User NonAnnotation(User user) {
return user;
}
http://localhost:8080/NonAnnotation?name=张三&age=18
2.@RequestParam
@GetMapping("/RequestParam")
public User RequestParam(@RequestParam String name, @RequestParam int age) {
User user = new User();
user.setName(name);
user.setAge(age);
return user;
}
http://localhost:8080/RequestParam?name=张三&age=18
3.@PathVariable
@GetMapping("/PathVariable/{name}/{age}")
public User PathVariable(@PathVariable String name, @PathVariable int age) {
User user = new User();
user.setName(name);
user.setAge(age);
return user;
}
http://localhost:8080/PathVariable/张三/18
4.@RequestBody
@PostMapping("/RequestBody")
public User RequestBody(@RequestBody User user) {
return user;
}
// Content-Type设置为applciation/json;charset=UTF-8
{
"name": "张三",
"age": 18
}
三、参数检验
- 需要spring-boot-starter-validation依赖
@NotBlank(message = "名字不能为空")
private String name;
@Min(message = "年龄不能小于1", value = 1)
private int age;
// 加上@Vaild
@PostMapping("/RequestBody")
public User RequestBody(@RequestBody @Valid User user) {
return user;
}
1.@Null
2.@NotNull
3.@AssertTrue
4.@AssertFalse
5.@Min(value)
6.@Max(value)
7.@Size(max, min)
8.@Digits(integer, fraction)
9.@Past
10.@Future
11.@Pattern(value)
12.@Email
13.@Length
14.@NotEmpty
15.@NotBlank
四、拦截器
- 多个拦截器时,先进后出。与过滤器类似
- preHandle中处理条件逻辑,Controller中处理详细逻辑。
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
// 逻辑处理,if-else,返回true/false
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}
}
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor); // 添加拦截器
}
}
@RestController
public class MyController {
@GetMapping("/hello")
public String hello() {
System.out.println("/hello接口");
return "hello";
}
}
二、RESTful
一、Swagger
- 需要springfox-boot-starter依赖
1.@Api
2.@ApiParam
3.@ApiOperation
4.@ApiModel
5.@ApiModelProperty
@Configuration
@EnableOpenApi
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // 扫描所有带有@ApiOperation的接口,可以替换成Api.class
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot趣味实战课")
.description("Spring Boot趣味实战课的RESTful接口文档说明")
.version("1.0.0")
.build();
}
}
@RestController
@Api(tags = "RESTful接口")
public class RestFulController {
@GetMapping("/swagger")
@ApiOperation(value = "Swagger接口")
public String swagger() {
return "Swagger Method";
}
}
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
访问http://localhost:8080/swagger-ui/index.html
二、Knife4j
- swagger的增强版,已经包含swagger
- 需要knife4j-spring-boot-starter依赖
不需要对之前的代码进行修改,直接访问http://localhost:8080/doc.html
三、RESTful实践
1. 获取数据
@GetMapping("/user/{name}")
public User getUser(@PathVariable String name) {
System.out.println("查询");
System.out.println("查询的用户名为" + name);
User user = new User();
user.setName(name);
user.setAge(18);
return user;
}
2. 增加数据
@PostMapping("/user")
public boolean createUser(@RequestBody User user) {
System.out.println("新增");
System.out.println("新增的用户为" + user);
if (Objects.nonNull(user)) {
return true;
} else {
return false;
}
}
3. 更新数据
@PutMapping("/user")
public boolean updateUser(@RequestBody User user) {
System.out.println("更新");
System.out.println("更新的用户为" + user);
if (Objects.nonNull(user)) {
return true;
} else {
return false;
}
}
4. 删除数据
@DeleteMapping("/user/{name}")
public boolean deleteUser(@PathVariable String name) {
System.out.println("删除");
System.out.println("删除的用户名为" + name);
if (Objects.nonNull(name)) {
return true;
} else {
return false;
}
}