Spring——RESTful Web服务

文章目录

  • [RESTful Web 服务介绍](#RESTful Web 服务介绍)
  • 内容概览
  • [下载 Lombok 优化代码利器](#下载 Lombok 优化代码利器)
  • [RESTful Web 服务开发](#RESTful Web 服务开发)
  • 运行项目并测试效果

RESTful Web 服务介绍

本节我们将开发一个简单的 RESTful Web 服务。

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

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

内容概览

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

  1. Lombok 优化代码利器
  2. @RestController
  3. @RequestParam以及@Pathvairable
  4. @RequestMapping @GetMapping...
  5. Responsity

下载 Lombok 优化代码利器

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

xml 复制代码
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.10</version>
		</dependency>

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

RESTful Web 服务开发

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

com.example.helloworld.entity

java 复制代码
/**
 * @author shuang.kou
 */
@Data
public class Book {
    private String name;
    private String description;
}

我们还需要一个控制器对书架上进行添加、查找以及查看。为此,我们需要新建一个 BookController

java 复制代码
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<Book> books = new ArrayList<>();

    @PostMapping("/book")
    public ResponseEntity<List<Book>> 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<Book> results = books.stream().filter(book -> book.getName().equals(name)).collect(Collectors.toList());
        return ResponseEntity.ok(results);
    }
}
  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 类型。
  6. ResponseEntity: 表示整个HTTP Response:状态码,标头和正文内容。我们可以使用它来自定义HTTP Response 的内容。

运行项目并测试效果

这里我们又用到了开发 Web 服务必备的 Postman 来帮助我们发请求测试。

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

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

2.使用 Delete 请求删除书籍

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

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

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

相关推荐
donecoding3 分钟前
前端AI开发:为什么选择SSE,它与分块传输编码有何不同?axios能处理SSE吗?
前端·人工智能
安_7 分钟前
<style scoped>跟<style>有什么区别
前端·vue
姝然_95278 分钟前
Claude Code 命令完整文档
前端
wjcroom9 分钟前
web版进销存的设计到实现一
前端
无知的前端12 分钟前
Flutter常见问题以及解决方案
前端·flutter·dart
BD_Marathon24 分钟前
Vue3_Vite构建工程化前端项目
前端
武清伯MVP25 分钟前
CSS Grid布局全解析:从基础到实战的二维布局方案
前端·css·grid
xfq31 分钟前
typescript泛型枚举以及NaN传染处理
前端·typescript
ErMao31 分钟前
开始搭建第一个React项目吧~
前端·react.js
Yanni4Night40 分钟前
JavaScript打包器大奖赛:谁是构建速度之王? 🚀
前端·javascript