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

相关推荐
汤面不加鱼丸2 分钟前
flutter实践:比例对比线图实现
前端·flutter
Jenlybein4 分钟前
进阶学习 Javascript ? 来看看这篇系统复习笔记 [ 面向对象篇 ]
前端·javascript·面试
专业掘金7 分钟前
0429 手打基础丸
前端
还有发量的前端程序员7 分钟前
Vue3初始化完整过程和原理
前端
Jenlybein8 分钟前
进阶学习 Javascript ? 来看看这篇系统复习笔记 [ Generator 篇 ]
前端·javascript·面试
绅士玖11 分钟前
Vue.js 小知识点大揭秘:提升开发效率的实用技巧
前端·vue.js
彭不懂赶紧问11 分钟前
鸿蒙NEXT开发浅进阶到精通04:类似支付宝横向导航栏与list组件联动随航
前端·harmonyos
Jenlybein11 分钟前
进阶学习 Javascript ? 来看看这篇系统复习笔记 [ Promise 与 async 篇 ]
前端·javascript·面试
用户20311966009613 分钟前
SwiftUI 中的 scaleEffect 修饰器
前端
袁煦丞15 分钟前
Mdserver-web让服务器自由飞翔!:cpolar内网穿透实验室第590个成功挑战
前端·程序员·远程工作