2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(二)

简介: 2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(二)

书接上文⬆⬆⬆

HTTP 是平台
要使用 Web 层次包装您的存储库,您必须使用 Spring MVC。多亏了 Spring Boot,代码基础设施很少。相反,我们可以专注于行动:

nonrest/src/main/java/payroll/EmployeeController.java

package payroll;

import java.util.List;

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.PutMapping;

import org.springframework.web.bind.annotation.RequestBody;

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

@RestController

class EmployeeController {

private final EmployeeRepository repository;

EmployeeController(EmployeeRepository repository) {

this.repository = repository;

}

// Aggregate root

// tag::get-aggregate-root[]

@GetMapping("/employees")

List all() {

return repository.findAll();

}

// end::get-aggregate-root[]

@PostMapping("/employees")

Employee newEmployee(@RequestBody Employee newEmployee) {

return repository.save(newEmployee);

}

// Single item

@GetMapping("/employees/{id}")

Employee one(@PathVariable Long id) {

return repository.findById(id)

.orElseThrow(() -> new EmployeeNotFoundException(id));

}

@PutMapping("/employees/{id}")

Employee replaceEmployee(@RequestBody Employee newEmployee, @PathVariable Long id) {

return repository.findById(id)

.map(employee -> {

employee.setName(newEmployee.getName());

employee.setRole(newEmployee.getRole());

return repository.save(employee);

})

.orElseGet(() -> {

newEmployee.setId(id);

return repository.save(newEmployee);

});

}

@DeleteMapping("/employees/{id}")

void deleteEmployee(@PathVariable Long id) {

repository.deleteById(id);

}

}

@RestController表示每个方法返回的数据会直接写入响应体,而不是渲染模板。
AnEmployeeRepository由构造函数注入到控制器中。
我们有每个操作的路由(@GetMapping、@PostMapping、@PutMapping和@DeleteMapping,对应于 HTTP GET、POST、PUT和DELETE调用)。(注意:阅读每种方法并了解它们的作用很有用。)
EmployeeNotFoundException是用于指示何时查找但未找到员工的异常。
nonrest/src/main/java/payroll/EmployeeNotFoundException.java

package payroll;

class EmployeeNotFoundException extends RuntimeException {

EmployeeNotFoundException(Long id) {

super("Could not find employee " + id);

}

}

当EmployeeNotFoundException抛出 an 时,Spring MVC 配置的这个额外花絮用于呈现HTTP 404:

nonrest/src/main/java/payroll/EmployeeNotFoundAdvice.java

package payroll;

import org.springframework.http.HttpStatus;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice

class EmployeeNotFoundAdvice {

@ResponseBody

@ExceptionHandler(EmployeeNotFoundException.class)

@ResponseStatus(HttpStatus.NOT_FOUND)

String employeeNotFoundHandler(EmployeeNotFoundException ex) {

return ex.getMessage();

}

}

@ResponseBody表示此建议直接呈现到响应正文中。
@ExceptionHandlerEmployeeNotFoundException将建议配置为仅在抛出an 时才响应。
@ResponseStatus说要发出一个HttpStatus.NOT_FOUND,即一个HTTP 404。
建议的主体生成内容。在这种情况下,它会给出异常的消息。
要启动应用程序,请右键单击其中并从 IDEpublic static void main中PayRollApplication选择运行,或者:

Spring Initializr 使用 maven 包装器,所以输入:

$ ./mvnw clean spring-boot:run
或者使用您安装的 Maven 版本输入:

$ mvn clean spring-boot:run
当应用程序启动时,我们可以立即对其进行询。

$ curl -v localhost:8080/员工
这将产生:

  • 尝试 ::1... TCP_NODELAY 设置 连接到 localhost (::1) 端口 8080 (#0)> GET /员工 HTTP/1.1> 主机:本地主机:8080> 用户代理:curl/7.54.0> 接受:/>< HTTP/1.1 200< 内容类型:application/json;charset=UTF-8< 传输编码:分块< 日期:格林威治标准时间 2018 年 8 月 9 日星期四 17:58:00<* 连接 #0 到主机 localhost 保持不变[{"id":1,"name":"Bilbo Baggins","role":"窃贼"},{"id":2,"name":"Frodo Baggins","角色":"小偷"} ]

在这里,您可以看到压缩格式的预加载数据。

如果您尝试查询一个不存在的用户......

$ curl -v localhost:8080/employees/99
你得到…

  • 尝试 ::1... TCP_NODELAY 设置 连接到 localhost (::1) 端口 8080 (#0)> 获取 /employees/99 HTTP/1.1> 主机:本地主机:8080> 用户代理:curl/7.54.0> 接受:/>< HTTP/1.1 404< 内容类型: text/plain;charset=UTF-8< 内容长度:26< 日期:格林威治标准时间 2018 年 8 月 9 日星期四 18:00:56<* 连接 #0 到主机 localhost 保持不变找不到员工 99

此消息很好地显示了HTTP 404错误以及自定义消息Could not find employee 99。

显示当前编码的交互并不难……​

如果您使用 Windows 命令提示符发出 cURL 命令,则以下命令可能无法正常工作。您必须选择一个支持单引号参数的终端,或者使用双引号,然后转义 JSON 中的那些。

要创建新Employee记录,我们在终端中使用以下命令——$开头的表示后面是终端命令:

$ curl -X POST localhost:8080/employees -H 'Content-type:application/json' -d '{"name": "Samwise Gamgee", "role": "gardener"}'
然后它存储新创建的员工并将其发送回给我们:

{"id":3,"name":"Samwise Gamgee","role":"gardener"}
您可以更新用户。让我们改变他的角色。

$ curl -X PUT localhost:8080/employees/3 -H 'Content-type:application/json' -d '{"name": "Samwise Gamgee", "role": "ring bearer"}'
我们可以看到输出中反映的变化。

{"id":3,"name":"Samwise Gamgee","role":"戒指持有者"}
您构建服务的方式可能会产生重大影响。在这种情况下,我们说update,但replace是更好的描述。例如,如果未提供名称,则它将被取消。

最后,您可以像这样删除用户:

$ curl -X DELETE 本地主机:8080/employees/3# 现在如果我们再看一遍,它就不见了$ curl localhost:8080/employees/3找不到员工 3
这一切都很好,但是我们有 RESTful 服务了吗?(如果你没有听懂提示,答案是否定的。)

少了什么东西?

......未完待续......

以上就是今天关于Spring的一些讨论,对你有帮助吗?如果你有兴趣深入了解,欢迎到Spring中国教育管理中心留言交流!

相关文章
|
1月前
|
安全 Java 数据库
安全无忧!在 Spring Boot 3.3 中轻松实现 TOTP 双因素认证
【10月更文挑战第8天】在现代应用程序开发中,安全性是一个不可忽视的重要环节。随着技术的发展,双因素认证(2FA)已经成为增强应用安全性的重要手段之一。本文将详细介绍如何在 Spring Boot 3.3 中实现基于时间的一次性密码(TOTP)双因素认证,让你的应用安全无忧。
85 5
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
48 4
|
1月前
|
Java API 数据库
如何使用Spring Boot构建RESTful API,以在线图书管理系统为例
【10月更文挑战第9天】本文介绍了如何使用Spring Boot构建RESTful API,以在线图书管理系统为例,从项目搭建、实体类定义、数据访问层创建、业务逻辑处理到RESTful API的实现,详细展示了每个步骤。通过Spring Boot的简洁配置和强大功能,开发者可以高效地开发出功能完备、易于维护的Web应用。
60 3
|
23天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
97 62
|
20天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
21天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
38 2
|
29天前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
110 6
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第8天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建并配置 Spring Boot 项目,实现后端 API 和安全配置。接着,使用 Ant Design Pro Vue 脚手架创建前端项目,配置动态路由和菜单,并创建相应的页面组件。最后,通过具体实践心得,分享了版本兼容性、安全性、性能调优等注意事项,帮助读者快速搭建高效且易维护的应用框架。
42 3
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第7天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建 Spring Boot 项目并配置 Spring Security。接着,实现后端 API 以提供菜单数据。在前端部分,使用 Ant Design Pro Vue 脚手架创建项目,并配置动态路由和菜单。最后,启动前后端服务,实现高效、美观且功能强大的应用框架。
44 2
|
2月前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
58 1