0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Spring构建REST服务(二)

「Spring」认证安全架构 来源:「Spring」认证安全架构 作者:「Spring」认证安全 2022-07-28 16:00 次阅读

书接上文⬆⬆⬆

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 GETPOSTPUTDELETE调用)。(注意:阅读每种方法并了解它们的作用很有用。)
  • 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 mainPayRollApplication选择运行,或者:

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 服务了吗?(如果你没有听懂提示,答案是否定的。)

少了什么东西?

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

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

#java##spring##spring认证##2022就业季#


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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • spring
    +关注

    关注

    0

    文章

    338

    浏览量

    14311
  • REST
    +关注

    关注

    0

    文章

    32

    浏览量

    9398
收藏 人收藏

    评论

    相关推荐

    如何用ACM简化你的Spring Cloud微服务环境配置管理

    摘要: 本文我们就如何使用阿里云ACM这样的配置管理产品在Spring Cloud中替代Spring Cloud Config帮助简化环境配置管理做一个简单的示例,帮助你理解基于ACM来简化微服务
    发表于 02-02 14:18

    使用阿里云ACM简化你的Spring Cloud微服务环境配置管理

    摘要: 本文我们就如何使用阿里云ACM这样的配置管理产品在Spring Cloud中替代Spring Cloud Config帮助简化环境配置管理做一个简单的示例,帮助你理解基于ACM来简化微服务
    发表于 07-04 17:16

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目标是构建“非常容易创建、独立、产品级别的基于Spring的应用”。这些应用是“立即可运行的”。在这个过程中,完全没有
    发表于 12-16 07:57

    REST端口支持构建动态REST请求来使用RESTful API网络

    REST端口支持构建动态REST请求来使用RESTful API网络服务。 概览 REST端口暴露了一个简单的接口来为
    的头像 发表于 01-17 09:11 4801次阅读

    REST API是什么,如何使用REST端口

    /服务器) 模型对资源进行增删改查操作。而其中客户端和服务器是分离的,而知行之桥中的REST端口就是作为REST API中的客户端,对服务
    的头像 发表于 02-17 18:00 9194次阅读
    <b class='flag-5'>REST</b> API是什么,如何使用<b class='flag-5'>REST</b>端口

    Spring REST Docs RESTful服务文档

    ./oschina_soft/spring-restdocs.zip
    发表于 05-24 09:31 1次下载
    <b class='flag-5'>Spring</b> <b class='flag-5'>REST</b> Docs RESTful<b class='flag-5'>服务</b>文档

    Spring认证是什么?

    ,例如:配置、组件扫描、AOP、数据访问和事务、REST、安全、自动配置、执行器、 Spring boot测试等。
    的头像 发表于 07-04 10:19 1279次阅读
    <b class='flag-5'>Spring</b>认证是什么?

    如何获得Spring认证?学习JAVA如何获得Spring Professional认证?

    、组件扫描、AOP、数据访问和事务、REST、安全、自动配置、执行器、 Spring boot测试等。 1)参加Spring中国教育管理中心授权合作伙伴Spring培训课程 2)报名考
    的头像 发表于 07-04 10:20 1745次阅读
    如何获得<b class='flag-5'>Spring</b>认证?学习JAVA如何获得<b class='flag-5'>Spring</b> Professional认证?

    如何使用Spring构建REST服务(一)

    关于 REST 如何适应微服务世界还有一个更大的讨论,但是——对于本教程——让我们看看构建 RESTful 服务
    的头像 发表于 07-28 15:59 889次阅读

    如何使用Spring构建REST服务(三)

    到目前为止,您拥有一个基于 Web 服务来处理涉及员工数据的核心操作。但这还不足以让事情变得“RESTful”。
    的头像 发表于 07-28 16:01 811次阅读

    如何使用Spring构建REST服务(四)

    通过一个额外的库和几行额外的代码,您已将超媒体添加到您的应用程序中。但这并不是使您的服务成为 RESTful 所需的唯一事情。REST 的一个重要方面是它既不是技术堆栈也不是单一标准。
    的头像 发表于 07-28 16:02 730次阅读

    如何使用Spring构建REST服务(五)

    到目前为止,您已经使用基本链接构建了一个可进化的 API。为了发展您的 API 并更好地为您的客户服务,您需要接受超媒体作为应用程序状态引擎的概念。
    的头像 发表于 07-28 16:03 824次阅读

    REST的6大指导原则

    systems )架构风格。由Roy Fielding 提出。 REST API 也称RESTful API, 其遵循REST架构规范的应用编程接口, 支持与RESTful WEB服务进行交互。简单来讲就是
    的头像 发表于 10-09 14:27 1493次阅读

    Spring Cloud :打造可扩展的微服务网关

    Spring Cloud Gateway是一个基于Spring Framework 5和Project Reactor的反应式编程模型的微服务网关。它提供了丰富的功能,包括动态路由、请求限流、集成安全性等,使其成为
    的头像 发表于 10-22 10:03 500次阅读
    <b class='flag-5'>Spring</b> Cloud :打造可扩展的微<b class='flag-5'>服务</b>网关

    Spring Cloud Gateway网关框架

    SpringCloud Gateway功能特征如下: (1) 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 进行构建; (2) 动态路由:能够匹配任何请求属性;
    的头像 发表于 08-22 09:58 431次阅读
    <b class='flag-5'>Spring</b> Cloud Gateway网关框架