202JavaSpringBoot2.7.5v2

一、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;
    }
}

三、持久化

四、三大锦囊

一、单元测试

二、异常处理

三、日志

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cs4m

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值