SpringMVC

RESTful

RESTful 风格是一种设计风格,用于构建网络服务(Web Services),特别是在使用 HTTP 协议作为通信协议时。它遵循一组约定和原则,使得网络服务具有可伸缩性、可维护性、可扩展性以及性能良好的特性。

以下是 RESTful 风格的一些主要特点和原则:

  • 基于资源(Resource-Based):RESTful 风格中的核心概念是资源(Resource),每个资源都有一个唯一的标识符(URI)来表示。客户端通过对资源的标识符进行操作来与资源进行交互,而不是直接对操作进行命名。

  • 统一接口(Uniform Interface):RESTful 风格使用统一的接口对资源进行操作。这包括使用 HTTP 动词(GET、POST、PUT、DELETE 等)对资源进行 CRUD 操作,以及使用标准的 HTTP 状态码来表示操作结果。

  • 无状态(Stateless):RESTful 风格的服务应该是无状态的,即服务端不会保存客户端的状态信息。每个请求应该包含足够的信息来完成该请求,服务端不会保存任何客户端的状态。

  • 资源关系(Resource Relationships):资源之间可以有关系,例如父子关系、引用关系等。在 RESTful 风格中,资源之间的关系通过 URI 来表示。

  • 支持多种数据格式(Support for Different Data Formats):RESTful 风格的服务应该支持多种数据格式,例如 JSON、XML 等,以便客户端可以根据自己的需求选择合适的数据格式。

  • 可缓存性(Cacheability):RESTful 风格的服务应该支持缓存机制,以提高性能和降低网络开销。服务端可以通过 HTTP 头部中的 Cache-Control 和 ETag 等字段来控制缓存。

  • 总的来说,RESTful 风格的设计遵循了一系列的原则和约定,使得网络服务具有良好的可伸缩性、可维护性和可扩展性。通过遵循 RESTful 风格,开发者可以更容易地构建出高效、可靠、易于理解和维护的网络服务。

如何理解RestController

@RestController 是 Spring MVC 中的一个注解,它结合了 @Controller 和 @ResponseBody 注解的功能。

@Controller:@Controller 注解用于标识一个类是 Spring MVC 中的控制器(Controller)。Spring MVC 会将带有 @Controller 注解的类识别为控制器,并将其注册到 Spring 容器中。

@ResponseBody:@ResponseBody 注解用于将控制器方法的返回值直接作为 HTTP 响应体返回给客户端,而不是将其解析为视图(View)。通常,@ResponseBody 注解与返回 JSON、XML 或其他格式的数据结合使用,用于实现 RESTful 风格的接口。

因此,@RestController 注解的作用是将一个类标识为 RESTful 风格的控制器,并且其中的方法返回的结果直接作为 HTTP 响应的内容返回给客户端。在 Spring Boot 中,通常使用 @RestController 注解来定义 RESTful 风格的控制器,而不再需要额外使用 @ResponseBody 注解。这样可以减少代码的冗余,提高开发效率。

下面是一个简单的示例:

1
2
3
4
5
6
7
8
9
10
11
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}

在上面的示例中,HelloController 类被标记为 @RestController,而 hello() 方法被标记为 @GetMapping(“/hello”),该方法会处理对 “/hello” 路径的 GET 请求,并将字符串 “Hello, World!” 作为响应体直接返回给客户端。

SpringLearning

1. 创建Spring项目

前言: 解释一下什么是断言 在Java中,断言(Assertion)是一种用于测试程序内部逻辑是否正确的机制。断言允许程序员在代码中插入一些检查点,用于验证在程序执行过程中的一些假设是否成立。 如果假设不成立,断言会抛出一个 AssertionError 异常,从而提醒程序员代码中存在错误。
1
2
3
4
5
6
// 断言的语法如下
assert expression;
// 或者这样
assert expression : message;
// 断言默认情况下是关闭的,想要启动断言可以:
java -ea MyProgram

Spring的有点可以让我们仅仅关注应用代码的需求无需考虑如何满足框架的需求.

开发WEB应用

显示信息

  1. 构建领域类
  2. 创建控制器类

  3. 控制器类的主要职责是处理HTTP请求
  4. 要么将请求传递给试图以便于渲染HTML
  5. 要么直接将数据写入RESTFUL
  6. 设计视图
    进行使用Thymeleaf starter

处理表单

有@GetMapping和@PostMapping两种方式,区别?

  1. @GetMapping 用于处理GET请求
  2. @PostMapping 用于处理POST请求
  3. 表单提交时,会自动将请求参数绑定到处理方法的参数上
  4. 处理方法返回一个视图名称,Thymeleaf会根据视图名称渲染出对应的HTML页面

使用数据

使用JDBC读取和写入数据

  1. 创建数据访问对象(DAO)
    使用Lombok注解可以在运行时生成访问器方法

使用Spring Data JPA持久化数据

比较流行的Spring Data项目包括
  • SpringDataJpa: 基于关系型数据库进行Jpa持久化
  • SpringDataMongoDB:持久化到MongoDB
  • SpringDataNeo4j: 持久化到Neo4j图数据库
  • SpringDataRedis: 持久化到Redis key-value数据库
  • SpringDataCassandra: 持久化到Cassandra数据库
  • CRUD操作: 创建读取更新删除

    使用配置属性

    细粒度的自动配置

    • bean装配
    • 属性注入

    消费REST服务

    Spring应用可以使用多种方式来消费REST

    • RestTemplate: Spring核心框架提供简单,同步REST客户端
    • WebClient: 响应式REST客户端,基于Project Reactor
    • Traverson: Spring提供的支持超链接同步的REST客户端

    使用RestTemplate消费REST服务

    使用WebClient消费REST服务

    发送异步消息

    Spring提供的三种异步消息方案

    • 使用JMS
    • 使用RabbitMQ
    • 使用Kafka

    使用Kafka的消息