SpringBoot开发手册

本文详细介绍了SpringBoot的使用,从创建第一个HelloWorld程序开始,涵盖了RestFul风格接口、配置文件读取、异常处理、过滤器和拦截器的实现,以及Mybatis的整合。讲解了如何创建SpringBoot项目,理解目录结构,编写Controller,使用@ConfigurationProperties绑定配置,以及使用Filter和Interceptor处理请求。此外,还涉及到异常处理的多种方式和RESTful API的设计原则。
摘要由CSDN通过智能技术生成

SpringBoot

这篇文章,介绍了通过SpringBoot开发的具体流程,和SpringBoot中一些常见的知识点

1、第一个HelloWorld程序

SpringBoot项目创建

Spring官网创建

https://start.spring.io/

不推荐

IDEA的Spring Initializr

File->New->Project->Spring Initializr

中途可以选择需要的组件

SpringBoot目录介绍

初始化后项目的目录

image-20210310212321422

一般情况下项目的目录结构

com
  +- example
    +- myproject
      +- Application.java
      |
      +- domain
      |  +- Customer.java
      |  +- CustomerRepository.java
      |
      +- service
      |  +- CustomerService.java
      |
      +- controller
      |  +- CustomerController.java
      |  
      +- config
      |  +- swagerConfig.java
      |
  1. Application.java是项目的启动类
  2. domain目录主要用于实体(Entity)与数据访问层(Repository)
  3. service 层主要是业务类代码
  4. controller 负责页面访问控制
  5. config 目录主要放一些配置类

新建一个Controller

新建controller包,并创建一个HelloController

增加@RestController注解

  • 这个@RestController注解,就是@Controller+@ResponseBody
// @Controller
// @ResponseBody
// 使用@RestController注解,可以替代COntroller 和ResponseBody注解
@RestController
public class HelloController {
   

    @RequestMapping("/hello")
    public String hello() {
   
        return "hello springboot";
    }
}

修改配置文件application.propertise,将端口改为2333

server.port=2333

运行测试

image-20210310213124296

小结

  • 了解了SpringBoot项目的创建

  • 了解了注解@RestController,既可以让类被Spring扫描到,又可以让返回请求不跳转到页面,而是在浏览器上显示返回内容

2、RestFul风格

RESTful Web 服务与传统的 MVC 开发一个关键区别是返回给客户端的内容的创建方式:传统的 MVC 模式开发会直接返回给客户端一个视图,但是 RESTful Web 服务一般会将返回的数据以 JSON 的形式返回,这也就是现在所推崇的前后端分离开发。

程序实例

book实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
   
    private int id;
    private String name;
}

BookController:

@RestController
@RequestMapping("/RestFul")
public class BookController {
   
    private List<Book> books = new ArrayList<Book>();

    /**
     *
     * @param book 前端传入的是json类型数据
     *             而使用RequestBody,就能将Json类型数据反序列化为合适的Java对象
     * @return
     */
    @PostMapping("/add")
    public ResponseEntity<List<Book>> addBook(@RequestBody Book book) {
   
        books.add(book);
        return ResponseEntity.ok(books);
    }

    @DeleteMapping("/del/{id}")
    public ResponseEntity deleteBookById(@PathVariable("id") int id) {
   
        books.remove(0);
        return ResponseEntity.ok(books);
    }
  
    @GetMapping("/get")
    public ResponseEntity getBookByName(@RequestParam("name")String name) {
   
        List<Book> list = books.stream()
                .filter(book -> book.getName().equals(name))
                .collect(Collectors.toList());
        return ResponseEntity.ok(list);
    }
  //上面的也可以改成RestFul形式
	  @GetMapping("/get/{name}")
    public ResponseEntity getBookByName(@PathVariable("name")String name) {
   
        List<Book> list = books.stream()
                .filter(book -> book.getName().equals(name))
                .collect(Collectors.toList());
        return ResponseEntity.ok(list);
    }

    @GetMapping("/list")
    public ResponseEntity getBookList() {
   
        return ResponseEntity.ok(books);
    }
}
  1. @RestController **将返回的对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中。**绝大部分情况下都是直接以 JSON 形式返回给客户端,很少的情况下才会以 XML 形式返回。转换成 XML 形式还需要额为的工作,上面代码中演示的直接就是将对象数据直接以 JSON 形式写入 HTTP 响应(Response)中。关于@Controller@RestController 的对比,我会在下一篇文章中单独介绍到(@Controller +@ResponseBody= @RestController)。
  2. @RequestMapping :上面的示例中没有指定 GET 与 PUT、POST 等,因为**@RequestMapping默认映射所有HTTP Action**,你可以使用@RequestMapping(method=ActionType)来缩小这个映射。
  3. @PostMapping实际上就等价于 @RequestMapping(method = RequestMethod.POST),同样的 @DeleteMapping ,@GetMapping也都一样,常用的 HTTP Action 都有一个这种形式的注解所对应。
  4. @PathVariable :取url地址中的参数。@RequestParam url的查询参数值。
  5. @RequestBody:可以将 *HttpRequest* body 中的 JSON 类型数据反序列化为合适的 Java 类型。

image-20210311090743536

  1. ResponseEntity: 表示整个HTTP Response:状态码,标头和正文内容。我们可以使用它来自定义HTTP Response 的内容(作用)。

测试:

使用postman进行测试:

image-20210311091032158

image-20210311091143678

小结

学习了:

@GetMapping,@DeleteMapping,@PostMapping等注解

@PathVariable用来获取URL中的参数地址

@RequestParamurl查询中的参数(但这种方式,URL的请求就不是restful风格的了)

@RequestBody可以将 *HttpRequest* body 中的 JSON 类型数据反序列化为合适的 Java 类型

ResponseEntity: 表示整个HTTP Response:状态码,标头和正文内容。我们可以使用它来自定义HTTP Response 的内容。

3、SpringBoot读取配置文件

使用@Value

my-phone: 18120194475
@Value("my-phone")
    private String phoneNum;

这种方式,Spring不推荐

Spring建议使用一下方式

使用@ConfigurationProperties

配置文件:

server:
  port: 8081

my-phone: 18120194475

library:
  name: FARO_Z图书馆
  books:
    - id: 1
      name: 悲惨世界
    - id: 2
      name: 合金弹头

编写一个实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix ="library")
@Component
@PropertySource("application.yml")
public class Library {
   
    private String name;
    private List<Book> books;
}

@Component表示将该类识别为一个Bean

@ConfigurationProperties用于绑定属性,其中prefix表示所绑定的属性的前缀

@PropertySource(value = "application.yml")表示配置文件路径。

编写一个controller进行测试:

@RestController
public class LibraryController {
   
    @Autowired
    private Library lib;

    @GetMapping("/lib")
    public String getLib() {
   
        return lib.toString();
    }
}

@Autowired如果要用配置好的实体类的话,一定要写,这样才可以绑定

测试结果:

image-20210311095327096

小结

@ConfigurationProperties(prefix=""):用于绑定属性,其中prefix表示所绑定的属性的前缀

@PropertySource(value""):表示噢诶之文件的路径

@Autowired&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FARO_Z

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

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

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

打赏作者

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

抵扣说明:

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

余额充值