springboot学习

springboot 学习笔记

  • 记录springboot学习过程
    • 环境安装jdk1.8 jre maven
    • springboot项目代建 常用注解使用
    • RESTful Web 服务介绍
    • Spring Boot 读取配置文件的几种方式

记录springboot学习过程

非常适合小白傻瓜式学习springboot过程,为自己记录点滴,方便记录也为后续的回忆做个参考,希望能帮到更多的学习者

环境安装jdk1.8 jre maven

maven安装与配置 maven私服搭建

springboot项目代建 常用注解使用

新建 Spring Boot 项目常用的两种方式
你可以通过 https://start.spring.io/ 这个网站来生成一个 Spring Boot 的项目。

start.spring.io

注意勾选上 Spring Web 这个模块,这是我们所必需的一个依赖。当所有选项都勾选完毕之后,点击下方的按钮 Generate 下载这个 Spring Boot 的项目。下载完成并解压之后,我们直接使用 IDEA 打开即可。

当然你也可以直接通过 IDEA 来生成一个 Spring Boot 的项目,具体方法和上面类似:File->New->Project->Spring Initializr。

Spring Boot 项目结构分析
成功打开项目之后,项目长下面这个样子:

以 Application为后缀名的 Java 类一般就是 Spring Boot 的启动类,比如本项目的启动项目就是HelloWorldApplication 。我们直接像运行普通 Java 程序一样运行它,由于 Spring Boot 本身就嵌入servlet容器的缘故,我们的 web 项目就运行成功了, 非常方便。

需要注意的一点是 Spring Boot 的启动类是需要最外层的,不然可能导致一些类无法被正确扫描到,导致一些奇怪的问题。 一般情况下 Spring Boot 项目结构类似下面这样

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 目录主要放一些配置类
@SpringBootApplication 注解分析
HelloWorldApplication

@SpringBootApplication
public class HelloWorldApplication {

public static void main(String[] args) {
	SpringApplication.run(HelloWorldApplication.class, args);
}

}
说到 Spring Boot 启动类就不得不介绍一下 @SpringBootApplication 注解了,这个注解的相关代码如下:

package org.springframework.boot.autoconfigure;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

}
package org.springframework.boot;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}
可以看出大概可以把 @SpringBootApplication 看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。根据 SpringBoot官网,这三个注解的作用分别是:

@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
@ComponentScan: 扫描被@Component (@Service,@Controller)注解的bean,注解默认会扫描该类所在的包下所有的类。
@Configuration:允许在上下文中注册额外的bean或导入其他配置类。
所以说 @SpringBootApplication 就是几个重要的注解的组合,为什么要有它?当然是为了省事,避免了我们每次开发 Spring Boot 项目都要写一些必备的注解。这一点在我们平时开发中也经常用到,比如我们通常会提一个测试基类,这个基类包含了我们写测试所需要的一些基本的注解和一些依赖。

新建一个 Controller
上面说了这么多,我们现在正式开始写 Spring Boot 版的 “Hello World” 吧。

新建一个 controller 文件夹,并在这个文件夹下新建一个名字叫做 HelloWorldController 的类。

@RestController是Spring 4 之后新加的注解,如果在Spring4之前开发 RESTful Web服务的话,你需要使用@Controller 并结合@ResponseBody注解,也就是说@Controller +@ResponseBody= @RestController。对于这两个注解,我在基础篇单独抽了一篇文章来介绍。

com.example.helloworld.controller

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(“test”)
public class HelloWorldController {
@GetMapping(“hello”)
public String sayHello() {
return “Hello World”;
}
}
默认情况下,Spring Boot 项目会使用 8080 作为项目的端口号。如果我们修改端口号的话,非常简单,直接修改

application.properties配置文件即可。

src/main/resources/application.properties

server.port=8333
大功告成,运行项目
运行 HelloWorldApplication ,运行成功控制台会打印出一些消息,不要忽略这些消息,它里面会有一些比较有用的信息。

2019-10-03 09:24:47.757 INFO 26326 — [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8333 (http) with context path ‘’
上面是我截取的一段控制台打印出的内容,通过这段内容我们就知道了 Spring Boot 默认使用的 Tomact 内置 web 服务器,项目被运行在我们指定的 8333 端口上,并且项目根上下文路径是 “/”。

浏览器 http://localhost:8333/test/hello 如果你可以在页面正确得到 “Hello World” 的话,说明你已经成功完成了这部分内容。

总结
通过本文我们学到了如何新建 Spring Boot 项目、SpringBoot 项目常见的项目结构分析、@SpringBootApplication 注解分析,最后实现了

RESTful Web 服务介绍

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

为了节省时间,本篇内容的代码是在 Spring Boot 版 Hello World & Spring Boot 项目结构分析 基础上进行开发的。

内容概览
通过下面的内容你将学习到下面这些东西:

Lombok 优化代码利器
@RestController
@RequestParam以及@Pathvairable
@RequestMapping、 @GetMapping…
Responsity
下载 Lombok 优化代码利器
因为本次开发用到了 Lombok 这个简化 Java 代码的工具,所以我们需要在 pom.xml 中添加相关依赖。如果对 Lombok 不熟悉的话,我强烈建议你去了解一下,可以参考这篇文章:《十分钟搞懂Java效率工具Lombok使用与原理》

	
		org.projectlombok
		lombok
		1.18.10
	

并且你需要下载 IDEA 中支持 lombok 的插件:

IDEA 中下载支持 lombok 的插件

RESTful Web 服务开发
假如我们有一个书架,上面放了很多书。为此,我们需要新建一个 Book 实体类。

com.example.helloworld.entity

/**

  • @author shuang.kou
    */
    @Data
    public class Book {
    private String name;
    private String description;
    }
    我们还需要一个控制器对书架上进行添加、查找以及查看。为此,我们需要新建一个 BookController 。

import com.example.helloworld.entity.Book;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/api")
public class BookController {

private List books = new ArrayList<>();

@PostMapping("/book")
public ResponseEntity> addBook(@RequestBody Book book) {
    books.add(book);
    return ResponseEntity.ok(books);
}

@DeleteMapping("/book/{id}")
public ResponseEntity deleteBookById(@PathVariable("id") int id) {
    books.remove(id);
    return ResponseEntity.ok(books);
}

@GetMapping("/book")
public ResponseEntity getBookByName(@RequestParam("name") String name) {
    List results = books.stream().filter(book -> book.getName().equals(name)).collect(Collectors.toList());
    return ResponseEntity.ok(results);
}

}
@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 的内容。
运行项目并测试效果
这里我们又用到了开发 Web 服务必备的 Postman 来帮助我们发请求测试。

1.使用 post 请求给书架增加书籍

这里我模拟添加了 3 本书籍。

使用 post 请求给书架增加书籍

2.使用 Delete 请求删除书籍

这个就不截图了,可以参考上面发Post请求的方式来进行,请求的 url: localhost:8333/api/book/1。

3.使用 Get 请求根据书名获取特定的书籍

请求的 url:localhost:8333/api/book?name=book1

总结
通过本文我们需到了使用 Lombok 来优化 Java 代码,以及一些开发 RestFul Web 服务常用的注解:@RestController 、@RequestMapping、@PostMapping、@PathVariable、@RequestParam、@RequestBody以及和HTTP Response 有关的 Responsity类。关于这些知识点的用法,我在上面都有介绍到,更多用法还需要自己去查阅相关文档。

Spring Boot 读取配置文件的几种方式

参考链接 添加链接描述

区分配置 先记录,后续补充
springboot学习_第1张图片
穿插一个小问题:properties文件容易中文乱码,可以两种方式解决
解决方案:

1. 使用yml配置文件进行配置。Spring Boot在读取yaml配置文件时使用的是UTF-8的编码方式。

2. 使用自定义配置文件如:custom.properties配置中文属性,并使用@PropertySource(value=“classpath:custom.properties”, encoding=“UTF-8”)注解指定读取的文件和编码。代码如下:
  springboot学习_第2张图片

你可能感兴趣的:(Java基础,spring,boot,java)