SpringBoot
这篇文章,介绍了通过SpringBoot开发的具体流程,和SpringBoot中一些常见的知识点
1、第一个HelloWorld程序
SpringBoot项目创建
Spring官网创建
https://start.spring.io/
不推荐
IDEA的Spring Initializr
File->New->Project->Spring Initializr
中途可以选择需要的组件
SpringBoot目录介绍
初始化后项目的目录
一般情况下项目的目录结构
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- controller
| +- CustomerController.java
|
+- config
| +- swagerConfig.java
|
Application.java
是项目的启动类- domain目录主要用于实体(Entity)与数据访问层(Repository)
- service 层主要是业务类代码
- controller 负责页面访问控制
- 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
运行测试
小结
-
了解了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);
}
}
@RestController
**将返回的对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中。**绝大部分情况下都是直接以 JSON 形式返回给客户端,很少的情况下才会以 XML 形式返回。转换成 XML 形式还需要额为的工作,上面代码中演示的直接就是将对象数据直接以 JSON 形式写入 HTTP 响应(Response)中。关于@Controller
和@RestController
的对比,我会在下一篇文章中单独介绍到(@Controller
+@ResponseBody
=@RestController
)。@RequestMapping
:上面的示例中没有指定 GET 与 PUT、POST 等,因为**@RequestMapping
默认映射所有HTTP Action**,你可以使用@RequestMapping(method=ActionType)
来缩小这个映射。@PostMapping
实际上就等价于@RequestMapping(method = RequestMethod.POST)
,同样的@DeleteMapping
,@GetMapping
也都一样,常用的 HTTP Action 都有一个这种形式的注解所对应。@PathVariable
:取url地址中的参数。@RequestParam
url的查询参数值。@RequestBody
:可以将 *HttpRequest* body 中的 JSON 类型数据反序列化为合适的 Java 类型。
ResponseEntity
: 表示整个HTTP Response:状态码,标头和正文内容。我们可以使用它来自定义HTTP Response 的内容(作用)。
测试:
使用postman进行测试:
小结
学习了:
@GetMapping,@DeleteMapping,@PostMapping
等注解
@PathVariable
用来获取URL中的参数地址
@RequestParam
url查询中的参数(但这种方式,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
如果要用配置好的实体类的话,一定要写,这样才可以绑定
测试结果:
小结
@ConfigurationProperties(prefix="")
:用于绑定属性,其中prefix表示所绑定的属性的前缀
@PropertySource(value"")
:表示噢诶之文件的路径
@Autowired
&